Какое сопоставление MySQL может сравнивать кириллицу и латиницу как равные?

В моем проекте мне нужно, чтобы база данных возвращала «Собака», если пользователь вводит в поле поиска кириллические буквы «Дог» и наоборот. Нравится поиск с транслитерацией? ...

Например, в Сербии официально используются латинские и кириллические символы ... взаимозаменяемые. Я подумал, может быть, есть специальное сопоставление для сербской латыни и кириллицы вместе, но, как я вижу, есть только отдельные версии.

Возможно ли это сделать? Как?

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
290
1

Ответы 1

Я почти уверен, что ни одно из сопоставлений utf8 / utf8mb4 не обрабатывает D = Д (и т. д.).

Предлагаю вам сделать следующее:

  • Создайте дополнительный столбец в таблице. Это будет романизированная версия строки. Проиндексируйте этот столбец. (Это может быть CHARACTER SET latin1; я не знаю, какой COLLATION был бы лучшим; возможно, это не имеет значения.)
  • Когда вы вставляете строку, вычисляйте строку для этого дополнительного столбца.
  • Также латинизируйте любую строку поиска. Затем выполните поиск по этому новому столбцу.

Романизация, вероятно, лучше всего делать в вашем приложении. Чтобы сделать это в SQL, потребовался бы длинный запутанный вложенный REPLACE(REPLACE(...)).

Большое спасибо за ответ, @Rick James! Так, может быть, мне следует скопировать строку в дополнительный столбец, а затем использовать один из эта функция транслитерации MySQL для ее транслитерации?

Alex Fedorin 03.05.2018 05:18

@AlexFedorin - мне нравится! Вероятно, это будет довольно медленно. И, как написано, он ограничивает входные и выходные строки до 512 символов. Может быть проблема с CHARACTER SET и / или COLLATIONкогда, процедура объявлена.

Rick James 03.05.2018 05:33

На самом деле мне это нужно только для заголовков, поэтому я не думаю, что там будет больше 512 символов. Что, если я буду везде использовать utf8mb4?

Alex Fedorin 03.05.2018 10:42

Для Западной Европы, включая кириллицу, utf8 и utf8mb4 идентичны. Последнее становится важным для эмодзи (который может появиться в названии?) И китайского языка. Конечно, используйте utf8mb4 везде, где может быть неанглийский текст. Дополнительным столбцом может быть ascii или latin1, поскольку он по определению никогда не будет содержать кириллицы (и т. д.).

Rick James 03.05.2018 20:24

Другие вопросы по теме