MySQL и UTF-8

Материал из rrv-wiki
Перейти к навигации Перейти к поиску


Определение кодировок mysql

mysql> show variables like '%char%'; 
+--------------------------+----------------------------+ 
| Variable_name            | Value                      | 
+--------------------------+----------------------------+ 
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
7 rows in set (0.03 sec)
  • character_set_client - кодировка в которой идет запрос от клиента к серверу.
  • character_set_connection - кодировка в которую должен перевести сервер символы из возможно другой (известной ему по переменной character_set_client) кодировки пришедшей от клиента, перед тем как ее (команду или запрос) обработать и отправить результат обратно клиенту.
  • character_set_database - кодировка отделно взятой базы данных.
  • character_set_results - кодировка в которой отправляются ответы от сервера к клиенту, здесь надо выставить кодировку в которой может отображать символы наш клиент (для нашего окна доса это cp866) и если эта переменная будет иметь другой параметр, например utf8 или сp1251 то вместо слова 'Нехристь' будут другие значки, но не вопросы.
  • character_set_server - кодировка всего сервера.

Вариант переноса с MYSQL c 4.0 на 4.1 или старше

Дампим базу на старом сервере и одновременно перекодируем ее с koi8-r в utf8:

 $ mysqldump -u root -p --force -c --all --add-drop-table my_db_name \
 | iconv -f koi8-r -t utf-8 > my_db_dump_utf8.sql

Создаем базу данных на новом сервере:

 mysql> CREATE DATABASE my_db_name DEFAULT CHARACTER SET utf8;

Заливаем базу на новый сервер:

 $ mysql -u root -p my_db_name < my_db_dump_utf8.sql

Если кодировка консоли и базы различается то можно воспользоваться следующими ключами:

--character-sets-dir=кодировка1  //кодировка консоли
--default-character-set=кодировка2 //кодировка базы

Для работы с базой в консоли требуется:

 mysql> set character_set_client=koi8r;
 mysql> set character_set_connection=utf8;
 mysql> set character_set_results=koi8r;

В принципе для работы с базой из скриптов, лудше при подключении также выполнить эти запросы.

Если все плохо, можно почитать здесь.