Доброго дня!
Имеется почтовый сервер Exim на DebianEtch, системная локаль utf8. Пользовательские данный Exim берет из MySQL. Провел mysqldum и в выводе увидел нечитабельные символы на месте данных набранных кирилицей. Думаю проблема в локале MySQL, стоит дефолтная latin1, сменил в интересующей меня таблице локаль на utf8. Провел снова mysqldump - результат тотже, на месте описания пользователя, например Иванов Сергей, снова нечитабельные данные. Насколько я понимаю если я попытаюсь восстановить базу с этого дампа то внесутся именно эти данные и уже в базе я получу нечитабельность.
Я хочу поинтересоваться - как я могу настроить базу или mysqldump что бы данные набранные русским корректно отображались dump-е. Или же в dump-е нелатинские символы отображаются некими кодами?
Спасибо.
charset MySQL
Модератор: Bizdelnick
-
fed71
- Сообщения: 2480
- ОС: Ubuntu
Re: charset MySQL
Википедия рулит!
Локализация
Начиная с версии 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'
Локализация
Начиная с версии 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
Мой блог http://fed71.livejournal.com
-
Dpoke
- Сообщения: 106
- ОС: Debian GNU/Linux Testing
Re: charset MySQL
Отображаются и русскими, проблема в том, что если в базе стоит кодировка latin1, то при ее смене смена кодировки данных не происходит - необходимо перекодировать их ручками(спец скриптами).
В вашем случае необходимо сменить кодировку в базе/таблице/нужном столбце (как вам удобнее)
и перекодировать имеющиеся данные.
почитать про кодировки mysql мона тут ->
http://dev.mysql.com/doc/refman/5.0/en/charset.html
про скрипты перекодировок тут ->
http://yoonkit.blogspot.com/2006/03/mysql-...n1-to-utf8.html
В вашем случае необходимо сменить кодировку в базе/таблице/нужном столбце (как вам удобнее)
и перекодировать имеющиеся данные.
почитать про кодировки 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
Ну тогда заодно на http://www.mysql.ru
Я не знаю кто я. Не помню ни серии своей, ни инвентарного номера...
Мой блог http://fed71.livejournal.com
Мой блог http://fed71.livejournal.com
-
IMB
- Сообщения: 2567
- ОС: Debian
Re: charset MySQL
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
Решил проблему. При снятии дампа с базы данных mysqldump по-умолчанию снимает его с использованием utf8. Соответственно, если Ваши данные хранятся в другой кодировке, для примера как у меня в дефолтной latin1, Вам надо учесть это при использовании mysqldump и использовать команду примерно такого вида:
Впредь мне урок - предварительно обращать внимание на конфигурирование сервера и не забывать о справке, в данном случае man 1 mysqldump.
Код: Выделить всё
mysqldump --default-character-set=<используемая Вами кодировка отличная от utf8> --result-file=<куда сохранять файл и его имя, необходимо указать полный путь если Вы хотите сохранить не в текущую директорию> <имя базы> -u <от имени кого Вы снимаете, пользователь должен обладать необходимыми правами> -pВпредь мне урок - предварительно обращать внимание на конфигурирование сервера и не забывать о справке, в данном случае man 1 mysqldump.
-
$tydent
- Сообщения: 56
- ОС: Ubuntu 8 i686, венда ХР
Re: charset MySQL
А как вогнать в базу дамп с кодировкой cp1251, если на мускуле щас стоит дефолтная latin1 ?