- En mi archivo my.ini modifiqué entre tantos cambios que había realizado modifiqué esta línea:
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=utf8
Cita: ¿Por qué aunque haya hecho esto, no me funciona al no hacer la sentencia Set Names 'utf8'?
Piensa que lo que haces es que por defecto tu PhP usa el charset utf8, pero tú envías la información a un servidor y el servidor te la devuelve, y necesita saber en qué codificación la recibe y en qué codificación quieres que te la devuelva. Por otra parte, tú puedes decirle que tu PHP codifique en utf8, pero en los inputs del archivo html estés escribiendo en latin1, ISO-8859-1 o ANSI que para los efectos es casi lo mismo; y entonces envías a la base codificada en utf8, mediante un programa que por defecto usa utf8, a un servidor que te recibe utf-8 y devuevle utf-8, una cadena en ISO-8859-1, y ahí es donde hay problema.
Cita: - Al crear la tabla puse que tenga cotejamiento utf8_unicode_ci. ¿Por qué es necesario también que a cada tabla le ponga este valor y también a cada campo en donde quiera trabajar con acentos?
- Cuando quiero buscar por ejemplo ..... Where campo = 'acá', y en mi base de datos existen datos que macheen con este parámetro, sin embargo no me arroja ningún resultado. Pero si pongo .... Where campo = 'aca' entonces así funciona de la forma esperada.
Esto no es necesario, pues puedes utilizar distintas collation para campos, incluso puedes cambiar la collation de un campo si lo consideras necesario. De hecho si al campo donde escribes acá le pones la collation utf8_bin te encontrará sólo las que tiene acento. Para esto están las distintas collation de cada charset, para elegir la que más te interese según la consulta que vayas a hacer sobre ese campo, y también para orden alfabético, etc. Las terminadas en ci (case insensitive) no distinguen entre mayúsculas y minúsculas, no tienen en cuenta los acentos, etc.
Cita: - Si bien al mostrar los resultados en la web me figuran los datos correctamente, en la base de datos se guardan con símbolos raros.
Cita: EDITO: Haciendo todo lo mismo, pero dejando los valores por defecto (latin1) y estableciendo el cotejamiento de los campos necesarios a latin1_spanish_ci, obtengo el mismo resultado, los datos se me muestran bien en la web, pero en la base de datos siguen apareciendo con simbolos raros.
Este, creo, es un problema mayor. Tú habías introducido los datos en latin1 y ahora los has cambiado a utf8. Los datos están grabados como latin1. Quizás deberías plantearte volver a latin1, es decir, dejar el my.ini como estaba. Volver a seleccionar el charset latin1 para la base. Elegir la collation latin1_bin o latin1_general_cs para los campos donde quieres que busque con acentos, y latin_spanisch_ci para aquellos en que prefieras que no importen los acentos ni las mayúsculas.
Además, guardar los archivos php y html como ANSI si trabajas en windows
Quitar el mysql_query ("set names 'utf8'")
y cambiar los meta de html dejando charset=ISO-8859-1 en lugar de utf-8
entre los <head></head>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1>
Entonces verás, imagino, todo igual, el texto de tu base y el texto html generado con esos datos y tu programación en PHP y con html.
Eso es lo que yo entiendo.