Итак, имеем MySQL 5.5, Ubuntu 12.04 и web-приложение, работающее под apache tomcat 7. Если мы попытаемся прочитать параметр из базы, значение которого содержит кириллицу, то в ответ получим нечто вроде "????????". Давайте разберемся в чем проблема.
SHOW VARIABLES LIKE 'char%';
В ответ получим что-то вроде:
Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам.
Нужно обратить внимание, что параметр default-character-set в секции [mysqld] устарел и не используется!!!
Наша задача - заставить MySQL сервер работать с кодировкой UTF-8. По-умолчанию в Ubuntu MySQL устанавливается с кодировкой
latin1
. В этом можно убедиться посмотрев вывод запроса: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:
SET names utf8;
и используя при создании таблиц:
...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
невозможно добиться полной поддержки кодировки utf8:
character_set_client utf8
character_set_connection utf8
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/
Кодировка по-умолчанию все равно останется latin1, что неудобно и может привести к ошибкам.
Чтобы сервер сразу загружался с нужной кодировкой, необходимо отредактировать файл /etc/mysql/my.cnf:
sudo nano -w /etc/mysql/my.cnf
В секцию [mysqld] добавьте следующую строку:
sudo nano -w /etc/mysql/my.cnf
В секцию [mysqld] добавьте следующую строку:
character-set-server=utf8
Нужно обратить внимание, что параметр default-character-set в секции [mysqld] устарел и не используется!!!
Также желательно установить кодировку для клиента и mysqldump. Для этого в секциях [client] и [mysqldump] необходимо добавить строчку:
default-character-set=utf8
Теперь необходимо перегрузить сервер MySQL:
sudo service mysql restart
default-character-set=utf8
Теперь необходимо перегрузить сервер MySQL:
sudo service mysql restart
Если теперь выполнить команду
SHOW VARIABLES LIKE 'char%' на MySQL сервере, то получим желаемый результат:
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/
При настройке подключения к серверу необходимо указать параметры подключения useUnicode=true и charSet=UTF8. Например:
jdbc.url=jdbc:mysql://localhost:3306/MYBASE?autoReconnect=true&useUnicode=true&charSet=UTF8
Комментариев нет:
Отправить комментарий