like учитывает регистр [РЕШЕНО]

Главные вкладки

Аватар пользователя topmet topmet 26 ноября 2010 в 9:46

запрос ищет с учетом регистра, как от этого избавиться ?

<?php$q = "SELECT nid FROM {node} WHERE title LIKE '%nok%' LIMIT 10 ";
$res = db_query($q);
$nids = '0,';
while ($node= db_fetch_object($res))  {
bf_log($node);
$nids.=$node->nid.',';
}
$nids = trim($nids, ',');?>

на этом же компе, этот же запрос, но через mysql менеджер(SQLyog) ,без учета регистра
SELECT nid FROM node WHERE title LIKE '%nok%' LIMIT 10

сравнил SHOW VARIABLES; в обих случаях, совпадают

.........
character_set_client: utf8
character_set_connection: utf8
character_set_database: utf8
character_set_filesystem: binary
character_set_results: utf8
character_set_server: latin1
character_set_system: utf8
character_sets_dir: \usr\local\mysql-5.1\share\charsets\
collation_connection: utf8_general_ci
collation_database: utf8_general_ci
collation_server: latin1_swedish_ci
..........

где я туплю ?

проблема была в LIKE '%nok%' - db_query() заменяет модификаторы %s, %d, %f, %b, %n, %% - на аргументы (которых нет в этом примере)
соответственно %n - заменялся на пустоту

Комментарии

Аватар пользователя varvashenia varvashenia 26 ноября 2010 в 10:56

Крутить настройки - поправить во всех местах до наступления сатисфакции. В базе, в таблицах, в полях, в подключении, по возможности в сервер.
Временно прикрутить можно что-то типа этого:

<?php
$search_string
=mb_strtolower('search_string','utf-8');?>

И поправить запрос
SELECT nid FROM {node} WHERE LOWER(title) LIKE '%nok%' LIMIT 10
Но что-то мне говорит, что в вашем случае lower() может нормально не работать.

Аватар пользователя graceman9 graceman9 26 ноября 2010 в 11:42

Стоп-стоп!

<?php
q = "SELECT nid FROM {node} WHERE title LIKE '%nok%' LIMIT 10 ";
$res = db_query($q);

Это неправильное использование db_query(), надо так:

<?php
q = "SELECT nid FROM {node} WHERE title LIKE '%s' LIMIT 10 ";
$res = db_query($q, '%nok%');

Дело в том что запрос парсится в db_query() и % воспринимается как подстановочный символ.

Аватар пользователя topmet topmet 26 ноября 2010 в 11:53

читал, но не все , похоже %n - воспринимает как модификатор, соответственно неправильно формирует like

RxB благодаря вам, разобрался в чем дело