Seleccionar página

MySQL y el mundo de los caracteres raros (charset)

por | Dic 9, 2012 | MySQL

MySQL y el mundo de los caracteres raros (charset)… Antes de empezar a trabajar sobre este tema, es recomendable que accedáis a la consola de MySQL y veáis que tipos de carácter emplea por defecto la base de datos. En todo caso, no os asustéis si véis carácteres raros porque puede ocurrir que simplemente se estén visualizando mal y que estén insertados correctamente (en otras ocasiones… están mal almacenados).

En nuestro caso, introducimos la siguiente sentencia:

mysql> show variables like "character_set%";

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

 

En este caso, observamos que nuestra consola va a visualizar los datos en UTF8 (character_set_client) mientras que las bases de datos se almacenan en latin1 por defecto (character_set_database).

Entramos en una de nuestas bases de datos y hacemos una select de una fila concreta:

mysql> use tecdoc;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from TOF_SUPPLIERS WHERE SUP_ID="1357";
+--------+-----------+-----------------+------------+-------------+
| SUP_ID | SUP_BRAND | SUP_SUPPLIER_NR | SUP_COU_ID | SUP_IS_HESS |
+--------+-----------+-----------------+------------+-------------+
|   1357 | NÃœRAL    |             216 |          0 |           0 |
+--------+-----------+-----------------+------------+-------------+
1 row in set (0.00 sec)

 

Como vemos, el campo SUP_BRAND aparece con un carácter raro. En este caso, simplemente estamos visualizando desde la consola de texto de MySQL con utf8 mientras que los datos están en la base de datos como latin1.

Por este motivo, basta con indicarle a la consola cliente que utilize latin1:

mysql> set names latin1;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from TOF_SUPPLIERS WHERE SUP_ID="1357";
+--------+-----------+-----------------+------------+-------------+
| SUP_ID | SUP_BRAND | SUP_SUPPLIER_NR | SUP_COU_ID | SUP_IS_HESS |
+--------+-----------+-----------------+------------+-------------+
|   1357 | NÜRAL     |             216 |          0 |           0 |
+--------+-----------+-----------------+------------+-------------+
1 row in set (0.00 sec)

 

¡ Funcionando ! Recordad que desde vuestras aplicaciones deberéis indicar que escoja esta codificación o sino, regenerar la base de datos almacenando los datos como utf8 (ver este artículo).

Te puede interesar…

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *