Долго мучился с этим вопросом и здесь ответа не нашел (может плохо искал...), поэтому решил описать свой метод решения проблемы.
Мне было необходимо, чтобы сервер MySql работал с кодировкой utf8.
По-умолчанию в Ubuntu MySql устанавливается с кодировкой latin1.
Это можно посмотреть:
mysql> show variables like 'char%';
в результате получим вот такой вывод:
character_set_client latin1
character_set_connection latin1
character_set_database latin1
character_set_filesystem binary
character_set_results latin1
character_set_server latin1
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
В связи с этим, даже используя при работе с сервером команду
set names utf8;
и используя при создании таблиц
...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
мы не добьемся полной поддержки кодировки utf8:
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1 <---------------------------------------------------------------------
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/
Кодировка по-умолчанию все равно останется latin1, что не удобно.
Чтобы сервер сразу загружался с нужной нам кодировкой utf8, необходимо в файл my.cnf добавить несколько строк:
nano -w /etc/mysql/my.cnf
в секцию [mysqld] добавим следующий код:
skip-character-set-client-handshake
default-character-set=utf8
init-connect='SET NAMES utf8'
default-collation=utf8_general_ci
Перезагрузим сервер MySql:
/etc/init.d/mysql restart
После этого список переменных будет выглядеть так:
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/
Чего мы и добивались.