Форум русскоязычного сообщества Ubuntu


Автор Тема: [Wiki] [HOWTO] Настройка кодировок MySql сервера  (Прочитано 24691 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ert

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Долго мучился с этим вопросом и здесь ответа не нашел (может плохо искал...), поэтому решил описать свой метод решения проблемы.

Мне было необходимо, чтобы сервер MySql работал с кодировкой utf8.
По-умолчанию в Ubuntu MySql устанавливается с кодировкой latin1.
Это можно посмотреть:

mysql> show variables like 'char%';
в результате получим вот такой вывод:

character_set_client   latin1                      
character_set_connection latin1                    
character_set_database    latin1                    
character_set_filesystem   binary                  
character_set_results    latin1                    
character_set_server     latin1                  
character_set_system    utf8                      
character_sets_dir       /usr/share/mysql/charsets/

В связи с этим, даже используя при работе с сервером команду

set names utf8;
и используя при создании таблиц

...DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
мы не добьемся полной поддержки кодировки utf8:

character_set_client    utf8                        
character_set_connection  utf8                      
character_set_database     utf8                    
character_set_filesystem   binary                    
character_set_results       utf8                      
character_set_server        latin1      <---------------------------------------------------------------------              
character_set_system       utf8                      
character_sets_dir         /usr/share/mysql/charsets/

Кодировка по-умолчанию все равно останется latin1, что не удобно.

Чтобы сервер сразу загружался с нужной нам кодировкой utf8, необходимо в файл my.cnf добавить несколько строк:

nano -w /etc/mysql/my.cnf
в секцию [mysqld] добавим следующий код:

skip-character-set-client-handshake
default-character-set=utf8
init-connect='SET NAMES utf8'
default-collation=utf8_general_ci

Перезагрузим сервер MySql:

/etc/init.d/mysql restart
После этого список переменных будет выглядеть так:

character_set_client      utf8                    
character_set_connection   utf8              
character_set_database      utf8                
character_set_filesystem  binary                    
character_set_results        utf8                        
character_set_server         utf8                        
character_set_system       utf8                        
character_sets_dir          /usr/share/mysql/charsets/

Чего мы и добивались.
« Последнее редактирование: 01 Март 2011, 21:01:22 от stmc »

Оффлайн baklan

  • Активист
  • *
  • Сообщений: 386
    • Просмотр профиля
    • backline
Re: HOWTO: Настройка кодировок MySql сервера
« Ответ #1 : 26 Декабрь 2009, 18:46:34 »
Спасибо, для меня весьма ценная инфа. Не понимал почему не могу в вэбмине вывести читаемые данные таблиц в UTF-8 . Сейчас сделал по вашему посту, все встало на свои места.

Оффлайн ert

  • Автор темы
  • Новичок
  • *
  • Сообщений: 36
    • Просмотр профиля
Re: HOWTO: Настройка кодировок MySql сервера
« Ответ #2 : 26 Декабрь 2009, 18:55:24 »
Да не за что :)

Меня тоже напрягало, что если добавляешь данные из PHP, в phpMyAdmin'e отображаются крякозябры и наоборот, при добавлении данных через phpMyAdmin в PHP вместо русских букв отображаются знаки вопроса...

Оффлайн Subsanekk

  • Активист
  • *
  • Сообщений: 441
    • Просмотр профиля
Re: HOWTO: Настройка кодировок MySql сервера
« Ответ #3 : 19 Январь 2010, 16:57:37 »
Спасибо!
Избавили от кароказябров!
А на хостингах как быть?
DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci будет работать?

Оффлайн Plastikman

  • Участник
  • *
  • Сообщений: 164
    • Просмотр профиля
Re: HOWTO: Настройка кодировок MySql сервера
« Ответ #4 : 19 Январь 2010, 17:49:28 »
В файл my.cnf в разделе [client] и [mysqld] нужно добавить такую строку:

default-character-set=utf8

и перестартануть mysql

Оффлайн kostryukov

  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: [Wiki]HOWTO: Настройка кодировок MySql сервера
« Ответ #5 : 01 Март 2011, 19:53:56 »
Подскажите, в чем проблема?
php вывожу из базы данные, вижу ????? ? вместо букв

в mysql utf8
скрипты php тоже в utf8

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
у меня можно спросить=)

Оффлайн igorwite

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
 Не рекомендуется изменять my.cnf файл непосредственно, поскольку это может вызвать проблемы при обновлении Ubuntu / Mysql на новую версию.
В конфигурационном файле/etc/mysql/my.cnf есть строка:
!includedir /etc/mysql/conf.d/
 Это позволит вставить файл с настройками в поддиректорию conf.d, при этом не меняя файл my.cnf.
Создаем новый файл: / etc/mysql/conf.d/utf8_charset.cnf со следующим содержимым:

[mysqld]
default-character-set=utf8

[client]
default-character-set=utf8

 Все работает. Причем отображение таблиц MySQL в терминале правильное, строки не разъезжаются. Кода изменял файл my.cnf, как указано выше, строки разбегались.
 Информацию взял здесь http://blog.lesc.se/2011/06/switch-to-utf-8-charset-in-mysql-on.html


Оффлайн igorwite

  • Новичок
  • *
  • Сообщений: 2
    • Просмотр профиля
В Ubuntu 12.04 столкнулся с некоторыми особенностями настройки кодировки MySQL 5.5.
Если ранее переделывали кодировку на utf8 и добавляли в my.cnf строку

[mysqld]
default-character-set=utf8
(или писали тоже самое в отдельном конфигурационном файле в
/ etc/mysql/conf.d/)

тогда после обновления на Ubuntu 12.04 будет выдавать ошибку при входе в MySQL:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

В MySQL 5.5 внесли какие-то изменения в синтаксис команд, пока не разобрался, но выяснил, что надо в конфигурации прописывать:

[mysqld]
collation-server = utf8_unicode_ci
character-set-server = utf8

В секциях [client] и [mysql] надо оставить

default-character-set=utf8

Можно попробовать помотреть какую выдаст ошибку командой
 
sudo mysqld --defaults-file=/etc/mysql/my.cnf

Оффлайн kastyaha

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: [Wiki] [HOWTO] Настройка кодировок MySql сервера
« Ответ #8 : 21 Октябрь 2012, 11:11:56 »
в 12.04 ничего из описанного не работает =(
может кто то решил проблему. поделитесь!

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 14863
  • Я не слышу.
    • Просмотр профиля
Re: [Wiki] [HOWTO] Настройка кодировок MySql сервера
« Ответ #9 : 21 Октябрь 2012, 12:09:05 »
Цитировать
skip-character-set-client-handshake
default-character-set=utf8
init-connect='SET NAMES utf8'
default-collation=utf8_general_ci
[mysqld]
character_set_server = utf8
« Последнее редактирование: 21 Октябрь 2012, 12:13:09 от victor00000 »
~.o

 

Страница сгенерирована за 0.061 секунд. Запросов: 24.