Juegos de caracteres en MySQL
MySQL August 17th, 2008
Cuando creas una base de datos en MySQL le puedes asignar un juego de caracteres (character set o charset). Si no lo haces, la base de datos toma el juego de caracteres por default del servidor. Por defautl MySQL utiliza el juego de caracteres latin1, el cual es apropiado en Estados unidos y la mayor parte de los paises europeos. El charset puede definirse a nivel de servidor, base de datos, tabla y columna.
Yo siempre me he ido con los defaults, que en mi caso es el juego de caracteres denominado latin1. Pero no siempre es apropiado usar este.
Aparejado con el juego de caracteres, viene lo que se llama ‘collation’, que no es otra cosa que un conjunto de reglas usadas en la comparación de caracteres. Este también se puede definir igual que el juego de caracteres para servidor, base de datos, tabla y columna. En MySQL el default es el latin_sweedish_ci.
Para averiguar el juego de caracteres de una base de datos existente en MySQL se hace con:
mysql> use nombredemibasededatos;
Luego:
mysql> show variables like “character_set_database”;
Ese comando arroja un resultado como este:
+————————+——–+
| Variable_name | Value |
+————————+——–+
| character_set_database | latin1 |
+————————+——–+
1 row in set (0.00 sec)
Similarmente, para averiguar el ‘collation’ actual se hace con:
mysql> show variables like “collation_database”;
+——————–+——————-+
| Variable_name | Value |
+——————–+——————-+
| collation_database | latin1_swedish_ci |
+——————–+——————-+
1 row in set (0.00 sec)
Cuando se conecta un programa cliente al servidor mysql, también se puede especificar el juego de caracteres que se utiliza, basta con conectarse y ensegida dar un comando como este:
SET NAMES ‘utf8′;
Si ya tienes tu base de datos creada y necesitas cambiarle el charset y el collation, se consigue con un comando como el siguiente:
mysql> alter database mydatabase charset utf8 collate utf8_spanish_ci;
Query OK, 1 row affected (0.04 sec)
En cambio, si apenas vas a crear tu base de datos y deseas especificar el juego de caracteres y collation, el comando seria algo como:
mysql> create database mibasededatos default character set ‘utf8′ default collate ‘utf8_general_ci’;
Query OK, 1 row affected (0.04 sec)
En http://www.collation-charts.org/mysql60/ puedes ver bastante información acerca de las diferentes collations.