Как заставить MySQL соответствовать `% D%` => `Đ` - PullRequest
2 голосов
/ 14 июня 2011

Я столкнулся с крайне разочаровывающей функцией, по какой-то причине запрос с выбором LIKE %D% не будет соответствовать Đ.

Однако все остальные символы, подобные этому, совпадают. %n% соответствует ñ, %o% соответствует , но если я ищу %Dong Nai%, я не получу Đồng Nai.

Хотя %Thua Thien-Hue% будет соответствовать Thừa Thiên-Huế

Это функция MySQL или что-то жестко запрограммированное в Unicode, или есть способ обойти это? Это делает людей, которые используют мой веб-сайт, неспособными найти события о некоторых вьетнамских провинциях, если у них нет доступа к ключу Đ, который практически никто в Америке не делает.

EDIT:

Тот факт, что a, e, i, o или u соответствуют всем вьетнамским гласным, является очень неожиданным поведением для вьетнамского говорящего.

для справки; Вот все гласные на вьетнамском языке.

а, б, б, б, а, б, б, б, б, б, б, б, б, б, б, б, б, б, б, у, б, у, б, э, б , ế, ễ, ể, ệ,,,,, í, ĩ, ỉ, ị,,,,,,, õ, ỏ, ỏ, ọ,,, ồ, ố, ỗ, ổ, ộ,,, ờ, ớ , ỡ, ở, ợ, ơ, ù, ú,,, ủ, ụ, u, ừ, ứ, ữ, ử, ự, ư


Тогда мой вопрос: «Что представляет собой достаточно другое письмо?».


Похоже, другие вьетнамские докладчики сообщили об этом как об ошибке в MySQL:

Такое поведение отсутствует в 5.6+. Я сообщу, поможет ли обновление MySQL.

http://bugs.mysql.com/bug.php?id=61258

Ответы [ 3 ]

2 голосов
/ 14 июня 2011

Это связано с сопоставлением.Проверьте http://www.collation -charts.org / mysql60 / , и вы увидите, что D и символ Đ не совпадают, когда дело доходит до сравнения.Как было предложено Нико в комментариях, самым простым (хотя и не самым быстрым) способом было бы заменить D на D при сравнении.Однако это может быть непрактичным в зависимости от ваших критериев производительности, и в этом случае вы можете захотеть сохранить отдельный столбец или таблицу содержимого, которые были изменены для замены определенных символов во время вставки данных в базу данных.

1 голос
/ 22 июля 2011

Эти вьетнамские гласные и их диакритические варианты в основном равны (имеют один и тот же базовый символ), но вторично (диакритически) различаются. Использование соответствующего сопоставления может сделать их равными.

Однако это отличается для 'D' и 'Đ', поскольку они не являются связанными символами и не равны ни по каким правилам сопоставления. Таким образом, сравнение с обеими буквами обязательно.

Реализация вьетнамского сопоставления в MySQL

0 голосов
/ 14 июня 2011

Это нормально, потому что any в любом случае не равно D (вы не хотите делать эту корреляцию) ...

D с ударом (Đ, đ) используется на вьетнамском,некоторые южнославянские (например, сербский), моро и саамские языки.Это не только «вид» D, поскольку он произносится по-разному ...

http://en.wikipedia.org/wiki/Eth

Другими словами ... Поиск записи, содержащей Đ, при поиске D не будет быть правильным.Это все равно что получить доллар петь $ при поиске S.

...