Регистрозависимый (case-sensitive) поиск в MySQL запросе

Опубликовано: Комментариев: 0

Иногда возникает ситуация, когда необходимо, чтобы SQL запрос отличал "слово" и "СЛОВО", т.е. сделать SQL запрос регистро зависимым. В коде ниже я покажу как найти все изображения с расширением JPG, а jpg не выбирать. Для начала создадим тестовую копию базы данных. Как видим из кода, изображение 2, 4, 7 имеют необходимое расширение.

--
-- Структура таблицы `item_photo`
--

CREATE TABLE IF NOT EXISTS `item_photo` (
  `item_photo_id` int(11) NOT NULL,
  `item_photo` text NOT NULL,
  PRIMARY KEY (`item_photo_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `item_photo`
--

INSERT INTO `item_photo` (`item_photo_id`,`item_photo`) VALUES
(1, 'image-1.jpg'),
(2, 'image-2.JPG'),
(3, 'image-3.jpg'),
(4, 'image-4.JPG'),
(5, 'image-5.jpg'),
(6, 'image-6.jpg'),
(7, 'image-7.JPG');
  А вот и сам SQL запрос
SELECT * FROM `item_photo`
WHERE item_photo LIKE '%JPG'
COLLATE utf8_bin
Пример выполнения запроса в песочнице: http://sqlfiddle.com/#!9/d9afa/1/0