mysql5 и кодировка

Способы задания кодировок

1) Для всего сервера при компиляции, определив параметры --with-charset и --with-collation:

./configure --with-charset=cp1251 --with-collation=cp1251_general_ci

2) Для всего сервера при запуске mysqld, определив параметры --character-set-server и --collation-server:

mysqld --character-set-server=cp1251 --collation-server=cp1251_bin


3) При создании БД:

CREATE DATABASE dbname DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin;

4) При создании таблиц:

CREATE TABLE tblname ( col INT ) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin;

5) В определениях столбцов:

CREATE TABLE tblname (
column1 varchar(255),
column2 varchar(255) CHARACTER SET cp1251 COLLATE cp1251_general_ci
) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_bin;

Для того чтобы посмотреть к какой кодировке привязана структура данных можно воспользоваться оператором SHOW CREATE:

mysql > SHOW CREATE TABLE tree_nodes;

| tree_nodes | CREATE TABLE `tree_nodes` (

) ENGINE=InnoDB DEFAULT CHARSET=cp1251 COLLATE=cp1251_bin |

Работа с клиентскими программами

Любой mysql-клиент при соединении с сервером может установить несколько переменных:
character_set_client – указывает, в какой кодировке будут поступать данные от клиента;

character_set_connection – указывает, в какую кодировку следует преобразовать данные полученые от клиента перед выполнением запроса;

collation_connection – указывает, каким образом сравнивать между собой строки в запросах;

character_set_results – указывает серверу не необходимость перекодировать результаты запроса в определенную кодировку перед выдачей их клиенту.
Для корректной работы клиента с сервером следует установть как минимум character_set_client,

character_set_connection, character_set_results при помощи оператора SET:
mysql_query(“SET character_set_client=’cp1251′”);
mysql_query(“SET character_set_connection=’cp1251′”);
mysql_query(“SET character_set_results=’cp1251′”);

Если запрос и данные в БД находятся в одинаковой кодировке, а перекодировка результата не требуется, то вместо установки character_set_client, character_set_connection, character_set_results достаточно выполнить:

mysql_query(“SET NAMES ‘cp1251′”);

Для того чтобы посмотреть значения этих переменных установленные по умолчанию можно воспользоваться оператором SHOW VARIABLES:

SHOW VARIABLES LIKE ‘character_set%’;

Материалы отсюда: http://habrahabr.ru/blogs/mysql/10983/
Еще очень полезная wiki тут: http://www.linux.by/wiki/index.php/FAQ_PHP_MySQL_charset

Advertisements

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s