Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> LIKE. Как сделать регистро не зависимый запрос? 
:(
    Опции темы
Fubu_By
Дата 29.10.2009, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 14.2.2007

Репутация: нет
Всего: 0



Допусти в таблице есть слова начинающиеся на Jab...,  но при вообде с прописной буквы запрос ничего не возращает.
Что нужно добавить в запрос?
Код

SELECT `name` FROM `products` WHERE `name` LIKE BINARY 'jab%'



--------------------
PM MAIL WWW   Вверх
Zloxa
Дата 29.10.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008

Репутация: 33
Всего: 161



Код

where upper(`name`) like 'JAB%'


Это сообщение отредактировал(а) Zloxa - 29.10.2009, 16:14


--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
azesmcar
Дата 29.10.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Код

SELECT `name` FROM `products` WHERE ucase(`name`) LIKE BINARY ucase('jab%')


Добавлено через 37 секунд
Zloxa опередил smile 
PM   Вверх
sTa1kEr
Дата 29.10.2009, 16:47 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



MySQL при сравнении строк текстовых полей основывается на установленном для них collation'е. Т.е. для того что бы MySQL сравнивал строки без учета регистра, должен быть установлен соответствующий case-insensitive collation. Например для таблицы:
Код

CREATE TABLE `products` (
          `id` int(11) NOT NULL auto_increment,
          `name` varchar(50) character set utf8 collate utf8_general_ci default NULL,
          PRIMARY KEY  (`id`)
        ) ENGINE=InnoDB

Следующий запрос:
Код

SELECT `name` FROM `products` WHERE `name` LIKE 'jab%'

Будет искать продукты с названием начинающимся на "jab" без учета регистра, т.к. utf8_general_ci регистро-независимый (о чем говорит "ci" на конце)

А ключевое слово BINARY, которое вы использовали в своем запросе, наоборот позволяет сравнивать строки с учетом регистра для любый collation'ов.

Добавлено через 7 минут и 58 секунд
Кстати, для того, что бы функция UPPER() корректно отработала так же должен быть установлен корректный collation.

Это сообщение отредактировал(а) sTa1kEr - 29.10.2009, 16:48
PM MAIL   Вверх
Бонифаций
Дата 30.10.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 827
Регистрация: 15.9.2005
Где: Brisbane

Репутация: 20
Всего: 40



Цитата(azesmcar @ 29.10.2009,  16:15)
Код

SELECT `name` FROM `products` WHERE ucase(`name`) LIKE BINARY ucase('jab%')


Добавлено @ 16:15
Zloxa опередил smile

В результате индексы не используются


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0613 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.