![]() |
|
Модераторы: skyboy |
![]()
|
|
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: 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? |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 41 Всего: 260 |
dm9, при вводе/выводе "и" и "й" различны? не проявляется ли глюк при записи в базу, а не при сравнении?
|
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
skyboy,
Добавлено @ 01:03 Короче, эти буквы считаются одинаковыми при построении уникального индекса. Добавлено @ 01:04 Если это важно, дистрибутив под Линукс... SuSE. |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
dm9, show create table, по возможности, в студию.
установлен ли для таблицы collation? -------------------- Теперь при чем :P |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 93 |
dm9, не уверен, но может надо проверить, что collation является AS (accent-sensitive).
Это сообщение отредактировал(а) Дрон - 27.10.2006, 11:57 -------------------- Да. Именно так. |
|||
|
||||
| dm9 |
|
||||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
> show create table ttt;
> установлен ли для таблицы collation? Я создавал таблицу так.
MySQL Query Browser показывает utf8_general_ci. Узнавать текущий collation запросом я не умею, но, думаю, этой информации уже достаточно. Добавлено @ 12:01 Дрон, с удовольствием бы, но как? |
||||
|
|||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 93 |
Виноват. Похоже, MySQL не делает различия между AS и AI. Тогда не знаю
Более того "и" и "й" даже при AI в MSSQL считаются различными. Это сообщение отредактировал(а) Дрон - 27.10.2006, 12:08 -------------------- Да. Именно так. |
|||
|
||||
| Coala |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 70 Регистрация: 4.5.2006 Где: Москва Репутация: нет Всего: 0 |
||||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 1 Всего: 360 |
Ты как таблицы заливаешь? Через дамп? Посмотри, может уже при экспортировании в текстовый файл он вместо "и", "й" сделал |
|||
|
||||
| Дрон |
|
|||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: нет Всего: 93 |
В смысле? В какой кодовой таблице? Я просто предположил, что вдруг по какому-то странному стечению обстоятельств "й" посчитали тем же символом, что "и", только с чёрточкой (accent) сверху. Ну кто ж этих буржуев знает? Позже я нашёл таблицу, которую можно использовать для справки: http://developer.mimer.com/charts/UCA_cyrillic.htm Правда СУБД какая-то странная -- первый раз её вижу, но это столь важно, т.к. моё рассуждение было чисто теоретическим. Вот набор символов, считающихся "одинаковыми": и 0438 И 0418 ѝ 045D Ѝ 040D ӣ 04E3 Ӣ 04E2 При этом "и-краткое" честно вынесено отдельно: й 0439 Й 0419 Так что моё предположение оказалось неверным. -------------------- Да. Именно так. |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Сергей, нет. Я банально вставляю данные через MySQL Query Browser.
Вот даже скриптик написал...
Только что проверил, под Windows-версию (ту же самую, 4.1.21) всё работает. Может быть проблема в системных настройках SuSE? Где там можно покопать? |
|||
|
||||
| dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: 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, если кому понадобится, обсуждение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |