В моем проекте мне нужно, чтобы база данных возвращала «Собака», если пользователь вводит в поле поиска кириллические буквы «Дог» и наоборот. Нравится поиск с транслитерацией? ...
Например, в Сербии официально используются латинские и кириллические символы ... взаимозаменяемые. Я подумал, может быть, есть специальное сопоставление для сербской латыни и кириллицы вместе, но, как я вижу, есть только отдельные версии.
Возможно ли это сделать? Как?
Я почти уверен, что ни одно из сопоставлений utf8 / utf8mb4 не обрабатывает D
= Д
(и т. д.).
Предлагаю вам сделать следующее:
CHARACTER SET latin1
; я не знаю, какой COLLATION
был бы лучшим; возможно, это не имеет значения.)Романизация, вероятно, лучше всего делать в вашем приложении. Чтобы сделать это в SQL, потребовался бы длинный запутанный вложенный REPLACE(REPLACE(...))
.
@AlexFedorin - мне нравится! Вероятно, это будет довольно медленно. И, как написано, он ограничивает входные и выходные строки до 512 символов. Может быть проблема с CHARACTER SET
и / или COLLATION
когда, процедура объявлена.
На самом деле мне это нужно только для заголовков, поэтому я не думаю, что там будет больше 512 символов. Что, если я буду везде использовать utf8mb4?
Для Западной Европы, включая кириллицу, utf8 и utf8mb4 идентичны. Последнее становится важным для эмодзи (который может появиться в названии?) И китайского языка. Конечно, используйте utf8mb4 везде, где может быть неанглийский текст. Дополнительным столбцом может быть ascii или latin1, поскольку он по определению никогда не будет содержать кириллицы (и т. д.).
Большое спасибо за ответ, @Rick James! Так, может быть, мне следует скопировать строку в дополнительный столбец, а затем использовать один из эта функция транслитерации MySQL для ее транслитерации?