Способы задания кодировок
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