Escribir en español con eñes y tildes es muy fácil, pero para ello debes
tener un CHARSET y una COLLATION que lo permitan. Yo uso charset utf8 y
collation utf8_spanisch_ci, pero seguro que lo logras con el CHARSET
latin1 y la collation latin1_spanisch_ci. No puedes aplicar a las tablas
y a los campos una collation que no tenga nada que ver con el charset
elegido.
Pero este no es el único problema. También tienes que hacer que se
entiendan tu servidor web APACHE y tu base de datos. Por otra parte, los
datos que muestras de tu base de datos, los muestras en un archivo PHP o
HTML, todo lo cual te obliga a usar esa misma codificación en los
archivos PHP y HTML, tanto para introducir datos como para mostrarlos.
Además, si eliges UTF8, tu navegador debe tener seleccionado un tipo de
letra utf8.
Quiero decir con esto que tu problema, si has elegido un charset de esos
y su cotejamiento (collation) adecuado para el español, el problema
ahora está probablemente en hacer que tu servidor se entere de eso, pues
creo que trabaja por defecto con ISO-8859-1. Además con unos meta que
indiquen el charset y guardando los archivos php y html como utf8, en
caso de que sea ese el charset elegido, se resolverá parte del problema,
si no todo él.
Te daré algunas indicaciones para hacerlo con utf8 (pido perdón al
moderador por incluir recomendaciones sobre html y PHP (es el programa
que yo uso), pero lo considero en este caso necesario, solicitándole que
quite el código que no considere necesario [he reportado el post])
BASE DE DATOS
1) Cuando creo una base a través de PHPMyAdmin y quiero que contenga
campos en utf-8, selecciono dicho charset, poniendo especial atención en
que el cotejamiento de las conexiones MySQL sea en utf_unicode_ci, la
tabla o tablas con cotejamiento utf_unicode_ci, los campos con
cotejamiento utf_unicode_ci (son los que yo utilizo), aunque sólo
aquellos en que voy a introducir utf-8.
ARCHIVOS HTML Y PHP
2) Las páginas con terminación html y php deben ser guardadas con
formato utf-8 (ojo, porque algunos editores no lo permiten). Yo uso
NotePad++ que en formato te permite elegir el que quieres. Si se trabaja
con sesiones, hay que guardar como ANSI y mostrar utf8 sin BOM, para
evitar que haya algo antes de los header.
3) En el archivo con terminación html debes escribir este meta <meta
http-equiv="Content-type" content="text/html; charset=utf-8" />
CONEXIÓN MYSQL MEDIANTE PHP
4) Cuando hagas la conexión a la base de datos MySQL, deberás escribir
tras la conexión y justo después de seleccionar la base: mysql_query
("SET NAMES 'utf8'"), como en el ejemplo.
<?php
$link = mysql_connect ('localhost', 'root', 'tuclave');
if (!$link){
echo 'error al conectar';
die;
}
$bd = mysql_select_db('mibase');
if (!$bd){
echo 'error al seleccionar la base d datos';
die;
}
mysql_query ("SET NAMES 'utf8'");
?>
NAVEGADOR
5) Y, finalmente, debemos tener al menos una fuente utf8 y ponerla como
fuente para nuestro navegador. Puedes en la programación poner una lista
de familias de letras utf8 para que vaya eligiendo entre ellas. Y creo
que si no encuentra una de ellas, seleccionará la letra unicode con la
que cuente.
Hay algunos truquillos más, como codificar como utf-8 un archivo de
texto (guardándolo como con ese formato) cuando vaya a importarse a una
base de datos con character set utf-8. Si no lo haces, observarás que
las palabras son cortadas por donde hay caracteres con acento o eñes.
Pero todavía hay más: el modo en que el paso de la información de AJAX a través del navegador o navegadores (hay diferencias).
Otra situación extraña que me ha ocurrido es que se me entregue una base
con una codificación que no es la adecuada a la naturaleza de los datos
con los que quiero trabajar. Pondré un ejemplo: se me entregó una base
codificada en ISO-8859-1, pero yo necesitaba codificación UTF-8. No me
quisieron cambiar la codificación. Es verdad, como se me dijo, que puedo
almacenar los datos en utf8 en las tablas y campos, y así lo hice, pero
la collation no funcionaba. La solución tendría que haber sido exportar
los datos y luego crear una base con la codificación utf8 e
importarlos, pero al no permitírseme me vi obligado a crear campos de
orden y consulta específicos, con programación.