Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

сети:решение_проблем_с_русским_языком_в_mysql [2011/12/16 12:12] (текущий)
Строка 1: Строка 1:
 +====== решение проблем с русским языком в mysql ======
 +Применимость:​ MySQL
 +
 +Слова для поиска:​ кракозябы
 +----
 +===== Задача:​ =====
 +При работе с базой данных в MySQL могут возникать разные проблемы при использовании кириллицы.
 +===== Решение:​ =====
 +Исторически сформировались ​ проблемы при использовании кириллицы. С этим ничего не поделаешь.
 +
 +По умолчанию сервис MYSQL устанавливается сконфигурированным на использование collation ​ с кодировкой latin1.
 +Ваши вебприложения могут отображать кириллицу,​ но при этом могут проблемы с сортировками,​ поиском и прочими действиями с русским языком.
 +
 +Чтобы избавится от этой "​головной боли"​ следует установить использование кодировки UTF-8 по умолчанию для всех действий. ​
 +
 +Однако если вы до этого использовали Latin1, ​ вам придется конвертировать ваши базы данных.
 +
 +<note important>​Сделайте дамп всех баз данных до внесения изменений в настройки.</​note>​
 +
 +Команды для конвертирования базы данных (для каждого дампа используйте уникальное имя):
 +
 +  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] ​ **   
 +
 +<code| /​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 ​
 +</​code>​
 +
 +Сохраните и  перезапустите демон 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
 +   
 +
 +
 +
 +===== Смотрите также: =====
 +  * [[http://​en.gentoo-wiki.com/​wiki/​Convert_latin1_to_UTF-8_in_MySQL]]
 +  * [[http://​phpfaq.ru/​charset]]
 +  * [[http://​dev.mysql.com/​doc/​refman/​5.0/​en/​charset-connection.html]]
 +
 +---- 
 +Актуальность:​ 2011/12/16 11:25 
 +{{tag> mysql кириллица}}