Интернационализация MySQL 5.1
2012.01.05
Сегодня меня вконец достала дефолтная настройка на 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)
Напомню следующие две вещи:
- уже имеющиеся текстовые данные в БД нужно конвертировать другими командами, которые мне сейчас не очень интересны;
- при импорте БД из SQL-дампа, нужно следить за тем, чтобы текст в файле дампа действительно был в UTF-8 ;).