понедельник, 28 февраля 2011 г.

c:\mysql\share\charsets\cp1251.conf not found

Запускаю PHP-скрипт на WebMatrix (т.е. под Windows). Пытаюсь подключиться к MySql:
$db = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
$db->set_charset("cp1251");

Ошибка: c:\mysql\share\charsets\cp1251.conf not found
Пытаюсь исправить my.ini (в моем случае он в C:\Program Files\MySQL\MySQL Server 5.5\). Добавляю туда:
[mysql]
default-character-set=cp1251
character-sets-dir="C:\Program Files\MySQL\MySQL Server 5.5\share\charsets\"

Не помогло.

Создаю каталог c:\mysql\share\charsets\, копирую туда cp1251.conf. Помогло.

Замечательно. Всё отладил на своем компьютере, пытаюсь установить на GoDaddy. А там - то же самое. Поскольку shared hosting, то руки у меня связаны. Долго гуглил, но ничего полезного не нашел.

Решил проблему так:
$db = new mysqli(MYSQL_HOST, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE);
$db->real_query("SET NAMES cp1251");

Это работает, хотя в документации mysqli как раз не рекомендуют пользоваться SQL-командой SET NAMES...

4 комментария:

Байдарочник комментирует...

О! Тебе прямая дорога на хабрахабр. 2 вопроса.
1) Почему ты в базе не используешь кодировку UTF-8?
2) mysqli - это не ошибка?

Valik комментирует...

UTF-8 не использую по историческим причинам :) Систему писали 6-7 лет, и тогда считалось, что страницы в кодировке UTF-8 слишком большие. Да и, по-моему, не все бразузеры корректно с ними работали. А вообще да, надо бы перейти.

Mysqli - не ошибка. Это MySql Improved - новый, рекомендуемый способ доступа к MySql. Причем с помощью класса, а не обычных процедур.

Misha комментирует...

Pohozhe, problema v probele v "Program Files" - poprobuy "...\Program\sFiles\..."

http://dev.mysql.com/doc/refman/5.1/en/option-files.html

Udachi!

Misha

Valik комментирует...

Ха-ха! Да, Миша - пожалуй, ты прав. К сожалению, это решает только проблему на рабочей станции. На shared hosting поменять конфигурацию MySql всё равно нельзя, скорее всего.

Ratings by outbrain