четверг, 5 января 2012 г.

Интернационализация MySQL 5.1

Сегодня меня вконец достала дефолтная настройка на latin1 в MySQL, и я пошёл курить маны. Хочется, естественно, перевести всё в utf8. Решается, как оказалось, всё тремя строчками в конфиге.

Открываем my.cnf (в Debian testing это /etc/mysql/my.cnf) и пишем там следующее:

[client]
default-character-set = utf8

[mysqld]
character-set-server = utf8
collation-server = utf8_general_ci

Понятное дело, надо дописать эти строчки в существующие секции [client] и [mysqld], а не создавать новые.

После сих чудесных заклинаний нужно перезапустить сервер MySQL, в Debian это делается так:

$ /etc/init.d/mysql restart

Проверяется mysql-клиентом следующим образом (после запроса показан вывод, который должен получиться):

mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)

Напомню следующие две вещи:

  1. уже имеющиеся текстовые данные в БД нужно конвертировать другими командами, которые мне сейчас не очень интересны;
  2. при импорте БД из SQL-дампа, нужно следить за тем, чтобы текст в файле дампа действительно был в UTF-8 ;).