Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: MySQL, LIKE и регистр
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » MySQL, LIKE и регистр

Страниц (2): [1] 2 »
 

1. z-kzn-z - 06 Декабря, 2008 - 17:24:26 - перейти к сообщению
есть некий запрос SELECT * FROM table WHERE field LIKE "%something%".
как сделать, чтобы оператор LIKE не учитывал регистр символов?
или подскажите какой-нить другой способ поиска некоторого поля в таблице в опр. поле)
2. Champion - 06 Декабря, 2008 - 18:44:14 - перейти к сообщению
WHERE upper(field) LIKE "%SOMETHING%".
3. z-kzn-z - 06 Декабря, 2008 - 18:47:50 - перейти к сообщению
ага, спасибо)
(Добавление)
а с кириллицей это работает? а то по-моему, нет.. во всяком случае у меня результата никакого
4. Champion - 06 Декабря, 2008 - 20:57:46 - перейти к сообщению
С кириллицей разные чудеса случаются. Сделайте SELECT upper(кириллическое поле) и посмотрите поднимется оно в верхний регистр или нет
5. z-kzn-z - 06 Декабря, 2008 - 21:26:42 - перейти к сообщению
попробовал. вообще ничего не возвращает...
CODE (text):
скопировать код в буфер обмена
  1. MySQL вернула пустой результат (т.е. ноль строк). (запрос занял 0.0409 сек.)
6. Champion - 07 Декабря, 2008 - 08:57:34 - перейти к сообщению
Сделайте без условия выборку. Я это написал просто чтобы посмотреть, как upper() у вас себя с кириллицей поведет. Если в таблице есть записи, запрос без условия не может вернуть ноль строк
7. z-kzn-z - 07 Декабря, 2008 - 18:06:25 - перейти к сообщению
возвращает поля в таком регистре, в каком они и есть..
8. Champion - 07 Декабря, 2008 - 18:24:17 - перейти к сообщению
тогда или процедуркой посимвольно или ждем подсказку более опытных людей
(Добавление)
Вот решени для interbase http://www[dot]ibase[dot]ru/devinfo/ibrusfaq[dot]htm
найдите строку Uppercase русских букв и читайте дальше
9. z-kzn-z - 07 Декабря, 2008 - 19:03:26 - перейти к сообщению
ну, для interbase мне не надо..
ладно, ждем опытных)
10. Champion - 07 Декабря, 2008 - 19:53:36 - перейти к сообщению
напишите процедурку и посимвольно...
11. valenok - 07 Декабря, 2008 - 19:56:02 - перейти к сообщению
SET NAMES перед выполнением запроса
и конвертирование в запросе:
Цитата:

SELECT *
FROM `abc`
WHERE `login` LIKE CONVERT( _utf8 'ждло' USING cp1251 )
COLLATE cp1251_general_ci
LIMIT 0 , 30

в качестве кодировки указывать кодировку поля в таблице
и заметьте не понадобились изменения регистра букв p1251_general_ci
12. z-kzn-z - 08 Декабря, 2008 - 13:22:18 - перейти к сообщению
эээм... а где именно указывать кодировку таблицы?)
13. valenok - 08 Декабря, 2008 - 21:09:09 - перейти к сообщению
Нужно было указывать при создании.. Но кодировка таблицы только определяет
кодировку полей в ней по умолчанию.
14. z-kzn-z - 08 Декабря, 2008 - 22:12:24 - перейти к сообщению
valenok, я знаю)
я имел ввиду, какая из кодировок в вашем примере (cp1251, utf8 или cp1251_general_ci) - кодировка поля в таблице?
15. valenok - 09 Декабря, 2008 - 06:05:07 - перейти к сообщению
Цитата:
WHERE `login` LIKE CONVERT( _utf8 'ждло' USING cp1251 )
COLLATE cp1251_general_ci


Этап 1 - конвертируем строку из кодировки utf8 в cp1251
Этап 2 - для сравнение значений используем кодировку поля, только caseInSensetive

Тоесть если вы изначально работаете с utf8 данными (рекомендовано),
то конвертировать ничего никуда не надо. А то что осталось в этапе 2 и есть кодировка
кодировка которую нужно указать для выборки.
--
У вас разве по умолчанию не стоит кодировка поля cp1251_general_ci ?

 

Powered by ExBB FM 1.0 RC1