решение проблем с русским языком в mysql
Применимость: MySQL
Слова для поиска: кракозябы
Задача:
При работе с базой данных в MySQL могут возникать разные проблемы при использовании кириллицы.
Решение:
Исторически сформировались проблемы при использовании кириллицы. С этим ничего не поделаешь.
По умолчанию сервис MYSQL устанавливается сконфигурированным на использование collation с кодировкой latin1. Ваши вебприложения могут отображать кириллицу, но при этом могут проблемы с сортировками, поиском и прочими действиями с русским языком.
Чтобы избавится от этой «головной боли» следует установить использование кодировки UTF-8 по умолчанию для всех действий.
Однако если вы до этого использовали Latin1, вам придется конвертировать ваши базы данных.
Команды для конвертирования базы данных (для каждого дампа используйте уникальное имя):
mysqldump --user=root -p --default-character-set=latin1 \ dump.sql <имя базы> iconv -f ISO8859-1 -t UTF-8 dump.sql > dump.utf8.sql perl -pi -w -e 's/CHARSET=latin1/CHARSET=utf8/g;' dump.utf8.sql
В дополнение к тем параметрам которые имеются в конфигурационном файле вашего сервера добавьте эти значения в соответствующие секции /etc/my.cnf - [client], [mysqld] и [mysqldump]
/etc/my.cnf
[client] default-character-set=utf8 [mysqld] default-character-set=utf8 character-set-server=utf8 collation-server=utf8_general_ci init-connect="SET NAMES utf8" skip-character-set-client-handshake [mysqldump] default-character-set=utf8
Сохраните и перезапустите демон mysql.
С этого момента везде будет использоваться кодировка UTF-8 по умолчанию.
Теперь вам следует пересоздать все базы данных и загрузить туда конвертированные данные
mysql --user=root -p --execute="DROP DATABASE <имя базы>;" mysql --user=root -p --execute="CREATE DATABASE <имя базы> \ CHARACTER SET utf8 COLLATE utf8_general_ci;" mysql --user=root -p <имя базы> < dump.utf8.sql