sql >> Base de Datos >  >> Database Tools >> phpMyAdmin

MySQL genera codificación occidental en un archivo PHP UTF-8

Use mysqli_set_charset para cambiar la codificación del cliente a UTF-8 justo después de conectarse:

$mysqli->set_charset("utf8");

La codificación del cliente es en lo que MySql espera que esté su entrada (por ejemplo, cuando inserta texto proporcionado por el usuario en una consulta de búsqueda) y en lo que le da los resultados (por lo que tiene que coincidir con su codificación de salida para que echo para mostrar las cosas correctamente).

Debe hacer que coincida con la codificación de su página web para tener en cuenta los dos escenarios anteriores y la codificación del archivo fuente de PHP (para que las partes codificadas de sus consultas se interpreten correctamente).

Actualización:Cómo convertir datos insertados usando latin-1 a utf-8

Con respecto a los datos que ya se han insertado utilizando la codificación de conexión incorrecta, existe una solución conveniente para solucionar el problema. Para cada columna que contenga este tipo de datos, debe hacer:

ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET latin1;
ALTER TABLE table_name MODIFY column_name BLOB;
ALTER TABLE table_name MODIFY column_name existing_column_type CHARACTER SET utf8;

Los marcadores de posición table_name , column_name y existing_column_type debe reemplazarse con los valores correctos de su base de datos cada vez.

Lo que esto hace es

  1. Dígale a MySql que necesita almacenar datos en esa columna en latin1. Este conjunto de caracteres contiene solo un pequeño subconjunto de utf8, por lo que, en general, esta conversión implica la pérdida de datos, pero en este escenario específico, los datos ya se interpretaron como latin1 en la entrada, por lo que no habrá efectos secundarios. Sin embargo, MySql convertirá internamente la representación de bytes de sus datos para que coincida con lo que se envió originalmente desde PHP.
  2. Convierta la columna a un tipo binario (BLOB ) que no tiene información de codificación asociada. En este punto, la columna contendrá bytes sin procesar que son una cadena de caracteres utf8 adecuada.
  3. Convierta la columna a su tipo de carácter anterior, diciéndole a MySql que se debe considerar que los bytes sin formato están en codificación utf8.

ADVERTENCIA:Solo puede usar este enfoque indiscriminado si la columna en cuestión contiene solo datos insertados incorrectamente. ¡Cualquier dato que se haya insertado correctamente se truncará en la primera aparición de cualquier carácter que no sea ASCII!

Por lo tanto, es una buena idea hacerlo ahora mismo, antes de que la corrección adicional de PHP entre en vigor.