решение проблем с русским языком в 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
 

Смотрите также: