Archivos de configuración (en una instalación por default en debian via dpkg):

  • Archivo global (server & client): /etc/mysql/my.cnf

  • Archivo para opciones específicas del server: /var/lib/mysql/my.cnf

  • Archivo de opciones para cada usuario (obviamente para el cliente): ~/.my.cnf

Server

Por algún motivo extraño, a partir de MySQL 4.1 (en que apareció el "character set" y "collation"), el character set por default es 'latin1' (es iso-8859-1, lo cual no deja de ser levemente razonable), pero lo delirante es que el collation por default es 'latin1_swedish_ci'... yo no sé si la gente que escribe mysql es sueca o qué, pero esto es un espanto (debería haber sido, más bien, 'latin1_general_ci'.

De todos modos, lo que a nosotros nos interesa es que el character set sea 'utf8' y que se ordene en español.

Para hacer esto hay que editar el archivo de configuración global (usualmente /etc/mysql/my.cnf) y, dentro de este archivo, buscar la sección [mysqld] y poner en algún lado las siguientes líneas:

character-set-server=utf8
collation-server=utf8_spanish_ci

Luego, hay que restartear el server:

/etc/init.d/mysql restart

Si llega a haber errores, pese a que se queje de que falta un archivo, lo más posible es que sea un moco en el archivo de configuración... fijarse bien en el syslog y buscar líneas del tipo:

Oct  4 11:35:45 localhost mysqld[28267]: 061004 11:35:45 [ERROR] /usr/sbin/mysqld: unknown variable 'charset-server=utf8'

La primera vez que se inicia el mysql 4.1 con un charset/collation forzado (como estamos haciendo), el pibe agarra todas las bases "viejas" (que no tenían forzado el charset/collation) y les encaja el default. Sin embargo, si después cambiamos el default, todas las bases/tablas que tengan ya un charset/collation, no se cambian (est es bueno).

Client

Si bien el manual dice que no es necesario, al invocar al cliente desde la línea de comandos con un archivo de entrada en UTF8, se mamó y leyó el archivo como si fuera latin1, con lo cual edito el archivo de configuración global (usualmente /etc/mysql/my.cnf) y, dentro de este archivo, buscar la sección [client] y poner en algún lado las siguientes líneas:

default-character-set=utf8

Obviamente, no es necesario restartear el server, ya que estas opciones sólo afectan al cliente.

CharacterSetDefaultEnMySql (última edición 2008-01-29 14:14:40 efectuada por localhost)

Edit and actions menu

  • Página inmutable
  • Información
  • Adjuntos