Проблема с кодировкой в mysql

lexx_ksb

Новичок
Проблема с кодировкой в mysql

FreeBSD 7.0 + mysql 5.0.45

Проблема в следующем:
при запросе
CREATE TABLE `r1_test` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`sgf` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;
таблица создается в кодировке latin1_swedish_ci поля VARCHAR тоже в latin1_swedish_ci.

Нужно чтобы создавались в cp1251_general_ci.

запросы:
SHOW VARIABLES LIKE 'character_set';
SHOW VARIABLES LIKE 'character_sets';
выдают пустой результат.
Не понятно почему. Может в конфиге что - то не прописано?

содержание /etc/my.cnf

[client]
character-sets-dir=/usr/local/mysql/share/mysql/charsets
default-character-set=cp1251

[mysqld]
default-character-set=cp1251
init-connect="SET NAMES cp1251"


Прочитав http://phpclub.ru/talk/showthread.php?s=&threadid=58477&rand=93, понял что придется пере компилировать mysql c поддержкой cp1251.
Скажите, пожалуйста, прав ли я или можно без компиляции заставить выполнять правильно такие запросы.

Проблем с сортировкой русских слов не наблюдаю (хотя может и есть)

Еще вопрос почему init-connect="SET NAMES cp1251" не действует?
Помогает только mysql_qwery(SET NAMES cp1251); в коде php
Причина та же или нет?

Спасибо
 

zerkms

TDD infected
Команда форума
CREATE TABLE `r1_test` (
`id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`sgf` VARCHAR( 255 ) NOT NULL
) ENGINE = MYISAM ;
таблица создается в кодировке latin1_swedish_ci поля VARCHAR тоже в latin1_swedish_ci.
http://dev.mysql.com/doc/refman/5.0/en/create-table.html

Помогает только mysql_query(SET NAMES cp1251); в коде php
SET NAMES нужно вызывать после mysql_connect всегда, чтобы не зависеть от настроек сервера и не носиться с пеной у рта и глупыми вопросами в голове.
 

lexx_ksb

Новичок
Синтаксис запросов я знаю. Мне нужно что бы работало без указания кодировки в запросе.

SET NAMES нужно вызывать после mysql_connect всегда, чтобы не зависеть от настроек сервера и не носиться с пеной у рта и глупыми вопросами в голове.
Да!!!! а ты видел пену???
SET NAMES и так вызывается после mysql_connect
Вопрос по другому поставлен - почему директива init-connect="SET NAMES cp1251" не срабатывает?.
 

zerkms

TDD infected
Команда форума
lexx_ksb
укажи для базы дефолтной cp1251
тогда и таблицы тоже будут в ней создаваться

Да!!!! а ты видел пену???
SET NAMES и так вызывается после mysql_connect
SET NAMES нужно вызывать после mysql_connect всегда, чтобы не зависеть от настроек сервера
 

lexx_ksb

Новичок
укажи для базы дефолтной cp1251
Где указать?
Тогда еще вопрос: почему база создалась в latin1_swedish_ci ?

Разве init-connect="SET NAMES cp1251" - это не одно и тоже что и mysql_query(SET NAMES cp1251); ?
 

zerkms

TDD infected
Команда форума
lexx_ksb
Где указать?
Тогда еще вопрос: почему база создалась в latin1_swedish_ci ?
http://dev.mysql.com/doc/refman/5.0/en/create-database.html

Разве init-connect="SET NAMES cp1251" - это не одно и тоже что и mysql_query(SET NAMES cp1251); ?
в этом случае ты становишься зависимым от настройки субд (повторяю в третий раз, в последний). это неправильно. допиши эту 1 строчку и спи спокойно.
 

DiMA

php.spb.ru
Команда форума
да, я такой злыдень, что имея доступ к настройкам субд, сам же буду специально их менять, чтобы пхп обломать
 

zerkms

TDD infected
Команда форума
*****
а завтра его скрипт переедет на сервер, где нет.
и вообще, объясните мне тёмному, зачем такую вещь, как кодировку соединения КЛИЕНТА хардкодить на СЕРВЕРЕ?
 

lexx_ksb

Новичок
да доступ есть.
Просто тогда непонятно, зачем директива init-connect?
Я специально ничего не меняю, ведь кодировка в настройках одна - cp1251.

А вообще меня больше интересует другой вопрос. Почему таблица не в той кодировке создается ( НУЖНО без указания кодировки в запросе)
А Вы прикопались к SET NAMES cp1251
 

Mols

Новичок
zerkms
+1
Один раз сделать и забыть. Вне зависимости от того есть доступ к конфигу или нет.
 
Сверху