[mysql] кодировка или какая-то хрень

a10063

проблема вот в чем
вот таблица:
 CREATE TABLE `rus-test` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`
UNIQUE KEY `name` (`name`)
) TYPE=MyISAM
записи с name = 'ab a', 'ab b' нормально вставляются, а с name = 'аб а', 'аб б' - говорит, что duplicate entry for key 2
наличие пробелов в примере существенно. mysql v.3.23.58
объясните, плиз, почему?

Marinavo_0507

Какой charset стоит у базы?
Нужно поставить правильный и/или сделать поле binary.

a10063

да, вот парился с этими кодировками...
нашел как менять client-side на cp1251
а server-side так и не вышло - стоит latin1
но неужели в этом дело? ведь без пробела все работает... все символы из диапазона 0x00 - 0xFF, почему серсер не может их просто положить в базу

Marinavo_0507

Для текстовых полей не различаются регистр букв и кажется ещё всякие умляуты, которых дофига в latin1.
У сервера кажется была глобальная опция, задающая чарсет.

a10063

блин! до меня только сейчас дошло попробовать вставить в раздел [mysqld] такую же опцию как в [client] про кодировку
теперь все ок, но со старой таблицей сервер отказался работать правильно, но с вновь созданной - ок (СУБД для каждой таблицы свою кодировку хранит, чтоль?)
в общем, спасибо, Крестный отец!

Marinavo_0507

Хз для чего он хранит, я читал только про версию 4.1, там всё переделано.
Вот там для каждого поля отдельно можно задать charset и collation.

gopnik1994

старую табличку высосать в виде дампа, дропнуть табличку, пересоздать с новым чарсетом, залить дамп обратно...

Marinavo_0507

Ага, так и делал на форуме с MySQL 4.1.
Пришлось ещё sed-ом поправить charset в дампе, он там сохранялся.

a10063

да, я уже так сделал, спасибо
Оставить комментарий
Имя или ник:
Комментарий: