Работа с базой данных с учетом регистра - как сделать выборку, обновление или удаление данных, если выбрана регистронезависимая кодировка _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.
Последние статьи
- 03.04.24ИТ / Уроки PHP Уроки простыми словами. Урок 3. Все операторы PHP с примерами, с выводом работы кода на экран.
- 02.04.24ИТ / Уроки PHP Уроки простыми словами. Урок 2. Типы данных в PHP с примерами.
- 02.04.24ИТ / Уроки PHP Уроки простыми словами. Урок 1. Коротко о языке веб-программирования PHP. Основы синтаксиса.
- 09.11.23ИТ / Базы данных Ошибки при переходе с MySQL 5.6 на 5.7 и как их исправить - импорт дампа БД завершился ошибкой или не работает INSERT. Отключение строгого режима STRICT_TRANS_TABLES или использование IGNORE
- 08.07.22ИТ / Разное Конвертация офисных файлов DOC, DOCX, DOCM, RTF в форматы DOCX, DOCM, DOC, RTF, PDF, HTML, XML, TXT без потерь и изменения разметки