Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Предыдущая версия
сети:решение_проблем_с_русским_языком_в_mysql [2011/12/16 12:12]
сети:решение_проблем_с_русским_языком_в_mysql [2023/08/14 09:11] (текущий)
a.percova [Смотрите также:]
Строка 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]]
 +  * [[https://www.colobridge.net/virtual-cloud-iaas/|Детальнее о нашем продукте "Виртуальная облачная инфраструктура IaaS"]]
 +
 +---- 
 +Актуальность: 2011/12/16 11:25 
 +{{tag> mysql кириллица}}