MySQL и UTF-8
Перейти к навигации
Перейти к поиску
Определение кодировок 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;
В принципе для работы с базой из скриптов, лудше при подключении также выполнить эти запросы.
Если все плохо, можно почитать здесь.