charset MySQL

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

IMB
Сообщения: 2567
ОС: Debian

charset MySQL

Сообщение IMB »

Доброго дня!
Имеется почтовый сервер Exim на DebianEtch, системная локаль utf8. Пользовательские данный Exim берет из MySQL. Провел mysqldum и в выводе увидел нечитабельные символы на месте данных набранных кирилицей. Думаю проблема в локале MySQL, стоит дефолтная latin1, сменил в интересующей меня таблице локаль на utf8. Провел снова mysqldump - результат тотже, на месте описания пользователя, например Иванов Сергей, снова нечитабельные данные. Насколько я понимаю если я попытаюсь восстановить базу с этого дампа то внесутся именно эти данные и уже в базе я получу нечитабельность.
Я хочу поинтересоваться - как я могу настроить базу или mysqldump что бы данные набранные русским корректно отображались dump-е. Или же в dump-е нелатинские символы отображаются некими кодами?
Спасибо.
Спасибо сказали:
Аватара пользователя
fed71
Сообщения: 2480
ОС: Ubuntu

Re: charset MySQL

Сообщение fed71 »

Википедия рулит!

Локализация

Начиная с версии 4.1 в СУБД MySQL внедрена новая система кодировок и сортировок. Если вы используете кодировку cp1251, перед выполнением SQL-инструкций необходимо настроить кодировку соединения при помощи операторов:

SET character_set_client='cp1251';
SET character_set_results='cp1251';
SET collation_connection='cp1251_general_ci';

Эти три оператора эквивалентны вызову одного оператора:

SET NAMES 'cp1251'

При использовании Юникода UTF-8 этот оператор выглядит следующим образом:

SET NAMES 'utf8'
Я не знаю кто я. Не помню ни серии своей, ни инвентарного номера...

Мой блог http://fed71.livejournal.com
Спасибо сказали:
Аватара пользователя
Dpoke
Сообщения: 106
ОС: Debian GNU/Linux Testing

Re: charset MySQL

Сообщение Dpoke »

Отображаются и русскими, проблема в том, что если в базе стоит кодировка latin1, то при ее смене смена кодировки данных не происходит - необходимо перекодировать их ручками(спец скриптами).

В вашем случае необходимо сменить кодировку в базе/таблице/нужном столбце (как вам удобнее)
и перекодировать имеющиеся данные.

почитать про кодировки mysql мона тут ->
http://dev.mysql.com/doc/refman/5.0/en/charset.html
про скрипты перекодировок тут ->
http://yoonkit.blogspot.com/2006/03/mysql-...n1-to-utf8.html
Любое слишком категоричное утверждение неверно, включая и это.
Спасибо сказали:
Аватара пользователя
fed71
Сообщения: 2480
ОС: Ubuntu

Re: charset MySQL

Сообщение fed71 »

Ну тогда заодно на http://www.mysql.ru
Я не знаю кто я. Не помню ни серии своей, ни инвентарного номера...

Мой блог http://fed71.livejournal.com
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: charset MySQL

Сообщение IMB »

Dpoke писал(а):
05.09.2007 16:09
Отображаются и русскими, проблема в том, что если в базе стоит кодировка latin1, то при ее смене смена кодировки данных не происходит - необходимо перекодировать их ручками(спец скриптами).

В вашем случае необходимо сменить кодировку в базе/таблице/нужном столбце (как вам удобнее)
и перекодировать имеющиеся данные.

почитать про кодировки mysql мона тут ->
http://dev.mysql.com/doc/refman/5.0/en/charset.html
про скрипты перекодировок тут ->
http://yoonkit.blogspot.com/2006/03/mysql-...n1-to-utf8.html

Тогда совсем уж наивный вопрос - зачем нужен ALTER TABLE tbl_name CONVERT TO CHARACTER SET? Я менял кодировку именно им.
И насколько безопасна перекодировка для действующей базы?
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: charset MySQL

Сообщение IMB »

Решил проблему. При снятии дампа с базы данных mysqldump по-умолчанию снимает его с использованием utf8. Соответственно, если Ваши данные хранятся в другой кодировке, для примера как у меня в дефолтной latin1, Вам надо учесть это при использовании mysqldump и использовать команду примерно такого вида:

Код: Выделить всё

mysqldump --default-character-set=<используемая Вами кодировка отличная от utf8> --result-file=<куда сохранять файл и его имя, необходимо указать полный путь если Вы хотите сохранить не в текущую директорию> <имя базы> -u <от имени кого Вы снимаете, пользователь должен обладать необходимыми правами> -p

Впредь мне урок - предварительно обращать внимание на конфигурирование сервера и не забывать о справке, в данном случае man 1 mysqldump.
Спасибо сказали:
$tydent
Сообщения: 56
ОС: Ubuntu 8 i686, венда ХР

Re: charset MySQL

Сообщение $tydent »

А как вогнать в базу дамп с кодировкой cp1251, если на мускуле щас стоит дефолтная latin1 ?
Спасибо сказали: