Работа с базой данных с учетом регистра - как сделать выборку, обновление или удаление данных, если выбрана регистронезависимая кодировка _ci
Выбор данных из базы данных (БД) является обычной частью работы любого современного приложения. В большинстве случаев достаточно получать данные без учета регистра, именно таким способом и работает большинство баз данных, что позволяет повысить производительность.
Однако, как быть в случаях, если необходим именно выбор данных из БД с учетом регистра? Данная проблема актуальна для недвоичных строк (VARCHAR, TEXT, CHAR и т.д.), тогда как для данных в двоичном виде происходит обработка с учетом регистра (BLOB, BINARY и прочие типы).
Для решения подобной задачи можно прибегнуть к нескольким способам:
– использовать команду BINARY для двоичной обработки данных. В таком случае будет происходить обработка данных в двоичном виде. Пример запроса: SELECT * FROM `table` WHERE BINARY `column` = 'value';
– использовать кодировку базы данных с учетом регистра, сопоставление носит название, оканчивающее на _cs или _bin. Скорее всего этот способ не подойдет для большинства случаев, так как никто не станет менять кодировку всей базы данных из-за одной операции с потребностью обрабатывать данные с учетом регистра;
– использовать в запросе команду с явно указанной кодировкой для конкретного запроса, но возможны ошибки, если указанной кодировки нет на сервере БД. Пример запроса: SELECT * FROM `table` WHERE `column` COLLATE latin1_general_cs = 'value';
– использовать специальные SQL команды UPPER или LOWER, но это может отразиться на производительности в случае большого количества данных. Пример запроса: SELECT * FROM `table` WHERE LOWER(`column`) = LOWER('value');
– использовать приведение регистра в коде и после чего выполнять запросы, для этого могут быть использованы функции наподобие mb_strtolower, mb_strtoupper и т.д.;
– использовать логику в своем коде для фильтрации строк с разным регистром. Это означает что сначала выбираются все необходимые данные, удовлетворяющие заданным критериям, после чего происходит дополнительная проверка регистра в коде, например, в PHP.
Последние два способа могут оказаться не самыми производительными для большого набора данных. Такой подход подойдет не для всех случаев, так как рекомендуется использовать средства БД для большей производительности.
Были рассмотрены некоторые приемы для работы с базой данных с учетом регистра. Аналогичные методы работы можно применять и для операций обновления и удаления данных, то есть для команд UPDATE и DELETE.
Последние статьи
- 09.07.22ИТ / Разное Конвертация офисных файлов DOC, DOCX, DOCM, RTF в форматы DOCX, DOCM, DOC, RTF, PDF, HTML, XML, TXT без потерь и изменения разметки
- 07.07.22ИТ / Безопасность Как защитить исходный код PHP, JS, HTML, CSS - обфускация, минимизация, сжатие и шифрование
- 06.07.22ИТ / Безопасность Подключение не защищено, проблема с Lets Encrypt - как исправить истекший 30.09.2021 DST Root CA X3, удалить его вручную и установить ISRG Root X1. Пример на MS Windows 7
- 08.07.21ИТ / Разное Как бесплатно сделать перевод для сайта без API, перевод документов в Google Translate
- 06.07.21ИТ / Разное Как сделать кнопку подписки на сайте, базу подписчиков и автоматическую рассылку