mysql - codificacion - utf8_encode array php
Corregir codificaciones (1)
Terminé con codificaciones de caracteres en mal estado en una de nuestras columnas de MySQL.
Típicamente tengo
√ © en lugar de é
√∂ en lugar de ö
√ ≠ en lugar de í
y así...
Estoy bastante seguro de que alguien aquí sabrá lo que sucedió y cómo solucionarlo.
ACTUALIZACIÓN: Basado en la respuesta de Bobince y como tenía estos datos en un archivo hice lo siguiente
#!/user/bin/env python
import codecs
f = codecs.open(''./file.csv'', ''r'', ''utf-8'')
f2 = codecs.open(''./file-fixed.csv'', ''w'', ''utf-8'')
for line in f:
f2.write(line.encode(''macroman'').decode(''utf-8'')),
después de lo cual
load data infile ''file-fixed.csv''
into table list1
fields terminated by '',''
optionally enclosed by ''"''
ignore 1 lines;
importar correctamente los datos.
ACTUALIZACIÓN2: Hammerite, solo para completar aquí están los detalles solicitados ...
mysql> SHOW VARIABLES LIKE ''character_set%'';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
El SHOW CREATE TABLE
para la tabla a la que estoy importando tiene DEFAULT CHARSET=utf8
EDIT3:
De hecho, con la configuración anterior, la load
no hizo lo correcto (no pude comparar con los campos utf8 existentes y mis datos cargados solo parecían cargados correctamente; supongo que debido a un cliente, conexión y resultados incorrectos, pero coincidentes) conjuntos de caracteres), así que actualicé la configuración a:
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
subí datos nuevamente y finalmente obtuve los datos cargados correctamente (comparable con los datos existentes).
Su texto ha sido codificado para UTF-8 y luego decodificado, erróneamente, como Mac Roman .
No podrá arreglar esto dentro de la base de datos, ya que MySQL no conoce la codificación Mac Rom. Puede escribir un script para recorrer cada fila de cada tabla afectada y corregir el texto invirtiendo el ciclo de codificación / decodificación. Python es una posibilidad, ya que tiene un buen rango de codificaciones:
>>> print u''é''.encode(''macroman'').decode(''utf-8'')
é
>>> print u''ö''.encode(''macroman'').decode(''utf-8'')
ö
>>> print u''í''.encode(''macroman'').decode(''utf-8'')
í
Alternativamente, si no hay contenido no ASCII que no se vea afectado por este problema, puede intentar usar mysqladmin
para exportar un volcado de SQL y luego convertirlo todo de una vez, ya sea usando un script como el anterior o si tiene un editor de texto ( presumiblemente en Mac) que puede hacerlo, cargando el script como UTF-8 y luego guardándolo como Mac Roman. Finalmente, vuelva a importar el volcado utilizando mysql < dump.sql
.