Establecer codificación de caracteres en una tabla
-
16-10-2019 - |
Pregunta
Tengo los datos siguientes: Trollhättan
-
Si imprimo y la configuración de la cabecera para
utf-8
, entonces esta es la salida en el navegador. -
Si no estoy creación de la
utf-8
en la cabecera,Trollhättan
. Sin embargo, cuando estoy almacenar los datos en la base de datos y la comprobación a travésphpmyadmin
, estoy consiguiendo la cadena siguiente:. Trollhättan -
Cuando yo soy la creación de la cabecera para
utf-8
, estoy recibiendo esta cadena:Trollhättan
al lado de esteTrollhättan
.
Dado que la tabla es latin1_swedish_ci
, tengo que usar en el UTF-8
mesa?
Solución
Esta es la lista de las intercalaciones de bajo UTF-8
mysql> select * from information_schema.collations where CHARACTER_SET_NAME = 'utf8';
+--------------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+--------------------+--------------------+-----+------------+-------------+---------+
| utf8_general_ci | utf8 | 33 | Yes | Yes | 1 |
| utf8_bin | utf8 | 83 | | Yes | 1 |
| utf8_unicode_ci | utf8 | 192 | | Yes | 8 |
| utf8_icelandic_ci | utf8 | 193 | | Yes | 8 |
| utf8_latvian_ci | utf8 | 194 | | Yes | 8 |
| utf8_romanian_ci | utf8 | 195 | | Yes | 8 |
| utf8_slovenian_ci | utf8 | 196 | | Yes | 8 |
| utf8_polish_ci | utf8 | 197 | | Yes | 8 |
| utf8_estonian_ci | utf8 | 198 | | Yes | 8 |
| utf8_spanish_ci | utf8 | 199 | | Yes | 8 |
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
| utf8_turkish_ci | utf8 | 201 | | Yes | 8 |
| utf8_czech_ci | utf8 | 202 | | Yes | 8 |
| utf8_danish_ci | utf8 | 203 | | Yes | 8 |
| utf8_lithuanian_ci | utf8 | 204 | | Yes | 8 |
| utf8_slovak_ci | utf8 | 205 | | Yes | 8 |
| utf8_spanish2_ci | utf8 | 206 | | Yes | 8 |
| utf8_roman_ci | utf8 | 207 | | Yes | 8 |
| utf8_persian_ci | utf8 | 208 | | Yes | 8 |
| utf8_esperanto_ci | utf8 | 209 | | Yes | 8 |
| utf8_hungarian_ci | utf8 | 210 | | Yes | 8 |
| utf8_sinhala_ci | utf8 | 211 | | Yes | 8 |
+--------------------+--------------------+-----+------------+-------------+---------+
22 rows in set (0.03 sec)
latin1_swedish_ci
pertenece a latin1
mysql> select * from information_schema.collations where COLLATION_NAME = 'latin1_swedish_ci';
+-------------------+--------------------+----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+-------------------+--------------------+----+------------+-------------+---------+
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
+-------------------+--------------------+----+------------+-------------+---------+
1 row in set (0.03 sec)
El utf8 más cercano para su cotejo es ID 200
mysql> select * from information_schema.collations where ID = 200;
+-----------------+--------------------+-----+------------+-------------+---------+
| COLLATION_NAME | CHARACTER_SET_NAME | ID | IS_DEFAULT | IS_COMPILED | SORTLEN |
+-----------------+--------------------+-----+------------+-------------+---------+
| utf8_swedish_ci | utf8 | 200 | | Yes | 8 |
+-----------------+--------------------+-----+------------+-------------+---------+
1 row in set (0.00 sec)
CAVEAT
Es posible que tenga que experimentar con latin1, cambiar el juego de caracteres y la colación de la columna individual de la tabla, o posiblemente ambos. Por lo menos, Latin1 para la exhibición en phpmyadmin.
Se podría tweek y experimentar con lo que toda la base de datos un conjunto de caracteres específico y el cotejo usando ALTER DATABASE .
ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
Asegúrese de hacer una copia de seguridad de la base de datos y cargarlo en un dev / DB puesta en escena y luego ejecutar ALTER DATABASE contra dev / puesta en escena.
Otros consejos
Es necesario asegurarse de que cuando se está "almacenando los datos en la base de datos", el cliente que su uso está utilizando UTF-8. Y después colocar el encabezado HTTP a UTF-8 completa la ida y vuelta.
La sorpresa es que no importa mucho lo que el conjunto de caracteres se utiliza en la base de datos (aunque bien podría ser conveniente para que eso sea UTF-8 también).