у php нет никаких параметров касательно кодировок, потому что их быть не может.
Можно только отправлять запросы вида "set names cp1251" и "set character set cp1251".
Конфигурация сервера MySQL:
my.cnf (приведены только касающиеся кодировок вещи)
[client]
default-character-set=koi8r
// это влияет НЕ НА КОДИРОВКУ СОЕДИНЕНИЙ. А на кодировку command-line утилитки mysql, которая под унихом - ессесно koi8r
character-sets-dir=/usr/share/mysql/charsets/
[mysql]
default-character-set=utf8
// насколько я помню это character-set-system, но может и нэт
[mysqld]
deafult-character-set=utf8
// character-set-database;
// character-set-server
// помойму овверрайдит значение в [mysql] для -set-system
после таких установок должно быть:
Код:
[size=2]mysql> show variables like '%chara%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | koi8r |
| character_set_connection | koi8r |
| character_set_database | utf8 |
| character_set_results | koi8r |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
[/size]
Прим: (в указанном примере мы храним все базы в utf8, что кстати мне очень нравится

).
Прим2: (установки -connection, -result, -client стоят таковыми изза [client] секции в my.cnf)
Итак. Только после указа таких настроек можно ложить что то в базу. (Все базы до этого будут "типа" в том чарсете -database который стоит по дефолту (а это latin1). То есть если у вас была база в mysql 3.x в koi8r, а вы переписали все файлики просто новому, то он будет думать что там latin1 кодировка, соответственно все перекодировочные операции будут неверны. Нужно mysqldump, либо (в случае огромных баз) select xx into outfile
Итак, все переписали и закинули. В общем сделали так что в базе кодировка именно такая, какая кодировка данных в ней.
запускаем через bash mysql, делаем простой запрос вида select, смотрим. Если русское видно - то все заеб*сь. Сервак прочитал utf8 с базы и переконвертил в koi8r.
Можно попробовать на скорую руку создать базу, таблицу, чего нибудь туда записать потом сделать запрос. После этого сбегать в /usr/lib/mysql/DBNAME/TABLENAME.MYD и посмотреть вручную примерную кодировку сего файла. Должон быть в utf8
клиенту нужно полюбому сообщать в какой кодировке он хочет кушать данные.
Код:
[size=2]mysql> set names koi8r;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%chara%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | koi8r |
| character_set_connection | koi8r |
| character_set_database | utf8 |
| character_set_results | koi8r |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
[/size]
видно что делает sat names
Код:
[size=2]mysql> set character set koi8r;
Query OK, 0 rows affected (0.00 sec)
mysql> show variables like '%chara%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | koi8r |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | koi8r |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
[/size]
set character set делает почти тоже самое тока не задевает чарсет соединения (что плохо). Потому юзаем set names.
Резюме.
Важно чтобы вбазе было именно в той кодировке все в какой оно действительно есть там. Иными словами чтобы символы в файле *.myd были именно в той кодировке в какой типа эта таблица есть
После сих вещей клиентом ставим чарсет который ему нужен.
p.s. с этим ярые проблемы под виндой. Консольный клиент mysql упорно не хочет нормально выплёвывать русские символы, однако php+mysql4.1+apache под виндой сжились не хуже чем по *nix.
Спасибо за внимание (сам мучился хрен знает сколько).
Collations советую не юзать до тех пор пока действительно не нужна будет необходимость
без set names (которые по умолчанию пхп не отправляет) mysql думает что клиент хочет ту кодировку которая у него глобальный дефолт (latin1, задаётсяч при компиляции).
можно конешна перекомпилировать, но при переезде на другой сервак будут проблемы. Посему юзай set names при открытии соединяния. mysql3 пропусит это мимо ушей.