Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Различия между «и» и «й» в MySQL 4.1.21 
V
    Опции темы
dm9
Дата 26.10.2006, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Здравствуйте.

Я перешёл с MySQL 4.1.16 на 4.1.21 и возникла следующая проблема: база считает буквы «и» и «й» одной буквой. Соответственно, все мои таблицы с уникальным текстовым полем (у меня свой поиск, и мне нужна таблица с уникальным string-полем) отказались заливаться из-за «duplicated key». Тем не менее, для меня это различие очень важно (ну, всё-таки слова «чай» и «чаи» — это разные слова).

Повторюсь, мне важно различия между этими двумя буквами, а не между заглавными и строчными.

Тестировал на utf8_general_ci, utf8_unicode_ci, utf8_bin, cp1251_general_ci.

Как заставить MySQL считать эти буквы разными? Пусть даже ценой за это будет то, что он станет различать заглавные и строчные буквы — мне это не очень важно.
Как с этим обстоит дело в MySQL5?

PM MAIL ICQ   Вверх
skyboy
Дата 26.10.2006, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



dm9, при вводе/выводе "и" и "й" различны? не проявляется ли глюк при записи в базу,  а не при сравнении?
PM MAIL   Вверх
dm9
Дата 27.10.2006, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



skyboy, 
Цитата(dm9 @  26.10.2006,  22:10 Найти цитируемый пост)
Соответственно, все мои таблицы с уникальным текстовым полем [...] отказались заливаться из-за «duplicated key»


Добавлено @ 01:03 
Короче, эти буквы считаются одинаковыми при построении уникального индекса.

Добавлено @ 01:04 
Если это важно, дистрибутив под Линукс... SuSE.

PM MAIL ICQ   Вверх
Ignat
Дата 27.10.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

Репутация: 21
Всего: 73



dm9, show create table, по возможности, в студию.

установлен ли для таблицы collation?


--------------------
Теперь при чем :P
PM   Вверх
Дрон
Дата 27.10.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



dm9, не уверен, но может надо проверить, что collation является AS (accent-sensitive).

Это сообщение отредактировал(а) Дрон - 27.10.2006, 11:57


--------------------
Да. Именно так.
PM   Вверх
dm9
Дата 27.10.2006, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



> show create table ttt;

Код

CREATE TABLE `ttt` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `str` varchar(45) NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `str` (`str`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8


> установлен ли для таблицы collation?

Я создавал таблицу так.
Код

CREATE TABLE `test`.`ttt` (
  `id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  `str` VARCHAR(45) NOT NULL DEFAULT '',
  PRIMARY KEY(`id`),
  UNIQUE `str`(`str`)
)
ENGINE = InnoDB
CHARACTER SET utf8 COLLATE utf8_general_ci;

MySQL Query Browser показывает utf8_general_ci.
Узнавать текущий collation запросом я не умею, но, думаю, этой информации уже достаточно.

Добавлено @ 12:01 
Дрон, с удовольствием бы, но как? smile

PM MAIL ICQ   Вверх
Дрон
Дата 27.10.2006, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Виноват. Похоже, MySQL не делает различия между AS и AI. Тогда не знаю  smile 

Более того "и" и "й" даже при AI в MSSQL считаются различными.

Это сообщение отредактировал(а) Дрон - 27.10.2006, 12:08


--------------------
Да. Именно так.
PM   Вверх
Coala
Дата 27.10.2006, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 4.5.2006
Где: Москва

Репутация: нет
Всего: 0



Цитата(Дрон @  27.10.2006,  13:03 Найти цитируемый пост)
Более того "и" и "й" даже при AI в MSSQL считаются различными.
Более того, у них разные номера в кодовой таблицы

PM MAIL   Вверх
sergejzr
Дата 27.10.2006, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: 1
Всего: 360



Цитата(dm9 @  26.10.2006,  20:10 Найти цитируемый пост)
все мои таблицы с уникальным текстовым полем (у меня свой поиск, и мне нужна таблица с уникальным string-полем) отказались заливаться из-за «duplicated key». 

Ты как таблицы заливаешь? Через дамп? Посмотри, может уже при экспортировании в текстовый файл он вместо "и", "й" сделал


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Дрон
Дата 27.10.2006, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-ненавистник :)
****


Профиль
Группа: Участник Клуба
Сообщений: 3179
Регистрация: 29.12.2002
Где: Санкт-Петербург

Репутация: нет
Всего: 93



Цитата(Coala @  27.10.2006,  13:43 Найти цитируемый пост)
Более того, у них разные номера в кодовой таблицы

В смысле? В какой кодовой таблице?
Я просто предположил, что вдруг по какому-то странному стечению обстоятельств "й" посчитали тем же символом, что "и", только с чёрточкой (accent) сверху. Ну кто ж этих буржуев знает? smile

Позже я нашёл таблицу, которую можно использовать для справки: http://developer.mimer.com/charts/UCA_cyrillic.htm
Правда СУБД какая-то странная -- первый раз её вижу, но это столь важно, т.к. моё рассуждение было чисто теоретическим.
Вот набор символов, считающихся "одинаковыми":
и 0438    
И 0418    
ѝ 045D    
Ѝ 040D    
ӣ 04E3    
Ӣ 04E2

При этом "и-краткое" честно вынесено отдельно:
й 0439    
Й 0419

Так что моё предположение оказалось неверным.


--------------------
Да. Именно так.
PM   Вверх
dm9
Дата 27.10.2006, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Сергей, нет. Я банально вставляю данные через MySQL Query Browser.
Вот даже скриптик написал...

Код

insert into ttt (str) values ('а');
insert into ttt (str) values ('б');
insert into ttt (str) values ('и');
insert into ttt (str) values ('й'); /* тут обламыватся */


Только что проверил, под Windows-версию (ту же самую, 4.1.21) всё работает. Может быть проблема в системных настройках SuSE? Где там можно покопать?

PM MAIL ICQ   Вверх
dm9
Дата 27.10.2006, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дмитрий Копытин
****


Профиль
Группа: Vingrad developer
Сообщений: 3876
Регистрация: 22.7.2002
Где: Москва

Репутация: нет
Всего: 137



Я неверно менял collate. Слишком доверился глупому MySQL Query Browser'у.

ALTER DATABASE `lori` CHARACTER SET utf8;
ALTER DATABASE `lori` COLLATE utf8_unicode_ci;

Так всё заработало.
Ну или при создании таблицы можно это указать.

utf8_unicode_ci работает нормально.
utf8_general_ci глючит.

Ответили на форуме sql.ru, если кому понадобится, обсуждение.

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0542 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.