slach
Новичок
еще раз про win32, MySQL4.1.x и кодировки SET NAMES в связке php4\php5
хух... вот мы тут попробовали с mysq4.x на mysql4.1.x мигрировать
нахватались под win32
1) всегда помните
php_mysql.dll всего лишь враппер для libmysql.dll,СЛЕДИТЕ за тем, какая libmysql.dll лежит у вас c:\windows\system32 и в других каталогах доступных через PATH
2) следите за тем, с каким my*.ini или my*.cnf запускается ваш клиент и сервер
и какие там настройки
default-character-set
и
character-sets-dir
учитывайте, что в php4 php_mysql.dll (до определенных версий. может в 4.3.11 уже поправили) собирается для 4.0.x и 3.23.x libmysql.dll, и пытается выхватить настройки из c:\my.cnf
кроме того, постоянно проскакивает глючок, когда php как клиент при коннекте ищет charset'ы в папке c:\mysql\share\charsets причем в формате .conf а не в новомодном *.xml
и номера чарсетов у php4 mysql3.x\4.x клиента отличаются от номеров которые посылает сервер mysql4.1 при установлении коннекта
поэтому если при запуске mysql.exe от mysql3.x
вы видите ошибки вида
File 'c:\mysql\share\charsets\?.conf' not found (Errcode: 22)
Character set '#51' is not a compiled character set and is not specified in the 'c:\mysql\share\charsets\Index' file
значит у вас одновременно на машине mysql4.0.x\3.23.x и mysql4.1.x и на mysql4.1.x стоит default_character_set не включенный в c:\mysql\share\charsets\Index
рецепт простой
идем в mysql4.1.x\share\charsets\Index.xml
ищем там id="51"
понимаем что это cp1251 родимый
добавляем c:\mysql\share\charsets\Index строку
cp1251 51
проверяем
3) всегда помните, php_mysql.dll собирается по умолчанию как клиент с charset'ом latin1, этот чарсет устанавливается при вызове mysql_connect и вы ничего с этим поделать не можете, кроме вызова SET NAMES ваш_charset, с которым собрана ваша база
4) важно понимать, что установка SET NAMES НИКАК не влияет на default_character_set который используется при СОЗДАНИИ таблиц по CREATE TABLE без указания collation и charset, они берутся из my*.ini директивы default-character-set
чтобы это поправить используйте комбинацию
SET NAMES ваш_чарсет;
SET character_set_database=ваш_чарсет;
SET character_set_server=ваш_чарсет;
в принципе можно прописать эти переменные в my*.ini файл в раздел [client]
5) можно запускать mysqld-nt.exe и т.п. с указанием принудительных настроек через директиву --defaults-file=[путь до вашего my*.ini]
6) инсталяция mysql4.1.x как СЕРВИСА с вашими настройка
mysqld-nt.exe --install mysql417 --defaults-file=C:\\usr\\local\\mysql4.1.7\\my-slach.ini
пользуйте \\ при конвертации mysql время от времени съедает слеши =)
все утверждения, на основе личного опыта и малость сумбурные
жду по всем пунктам комментариев
но ВНЯТНЫХ
хух... вот мы тут попробовали с mysq4.x на mysql4.1.x мигрировать
нахватались под win32
1) всегда помните
php_mysql.dll всего лишь враппер для libmysql.dll,СЛЕДИТЕ за тем, какая libmysql.dll лежит у вас c:\windows\system32 и в других каталогах доступных через PATH
2) следите за тем, с каким my*.ini или my*.cnf запускается ваш клиент и сервер
и какие там настройки
default-character-set
и
character-sets-dir
учитывайте, что в php4 php_mysql.dll (до определенных версий. может в 4.3.11 уже поправили) собирается для 4.0.x и 3.23.x libmysql.dll, и пытается выхватить настройки из c:\my.cnf
кроме того, постоянно проскакивает глючок, когда php как клиент при коннекте ищет charset'ы в папке c:\mysql\share\charsets причем в формате .conf а не в новомодном *.xml
и номера чарсетов у php4 mysql3.x\4.x клиента отличаются от номеров которые посылает сервер mysql4.1 при установлении коннекта
поэтому если при запуске mysql.exe от mysql3.x
вы видите ошибки вида
File 'c:\mysql\share\charsets\?.conf' not found (Errcode: 22)
Character set '#51' is not a compiled character set and is not specified in the 'c:\mysql\share\charsets\Index' file
значит у вас одновременно на машине mysql4.0.x\3.23.x и mysql4.1.x и на mysql4.1.x стоит default_character_set не включенный в c:\mysql\share\charsets\Index
рецепт простой
идем в mysql4.1.x\share\charsets\Index.xml
ищем там id="51"
понимаем что это cp1251 родимый
добавляем c:\mysql\share\charsets\Index строку
cp1251 51
проверяем
3) всегда помните, php_mysql.dll собирается по умолчанию как клиент с charset'ом latin1, этот чарсет устанавливается при вызове mysql_connect и вы ничего с этим поделать не можете, кроме вызова SET NAMES ваш_charset, с которым собрана ваша база
4) важно понимать, что установка SET NAMES НИКАК не влияет на default_character_set который используется при СОЗДАНИИ таблиц по CREATE TABLE без указания collation и charset, они берутся из my*.ini директивы default-character-set
чтобы это поправить используйте комбинацию
SET NAMES ваш_чарсет;
SET character_set_database=ваш_чарсет;
SET character_set_server=ваш_чарсет;
в принципе можно прописать эти переменные в my*.ini файл в раздел [client]
5) можно запускать mysqld-nt.exe и т.п. с указанием принудительных настроек через директиву --defaults-file=[путь до вашего my*.ini]
6) инсталяция mysql4.1.x как СЕРВИСА с вашими настройка
mysqld-nt.exe --install mysql417 --defaults-file=C:\\usr\\local\\mysql4.1.7\\my-slach.ini
пользуйте \\ при конвертации mysql время от времени съедает слеши =)
все утверждения, на основе личного опыта и малость сумбурные
жду по всем пунктам комментариев
но ВНЯТНЫХ