запрос ищет с учетом регистра, как от этого избавиться ?
<?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 - заменялся на пустоту
Комментарии
SELECT nid FROM {node} WHERE title COLLATE utf8_general_ci LIKE '%nok%' LIMIT 10
COLLATE utf8_general_ci - не помогло
Хм.. Где-то что-то конкретно плющит.
А если так:
SELECT nid FROM {node} WHERE title COLLATE utf8_general_ci LIKE _utf8 '%nok%' LIMIT 10
еще один момент выяснил,
title: "Nokia blabla ........"
LIKE 'nokIa%' - находит
LIKE '%nokIa%' - нет
не знаю что и думать
Крутить настройки - поправить во всех местах до наступления сатисфакции. В базе, в таблицах, в полях, в подключении, по возможности в сервер.
Временно прикрутить можно что-то типа этого:
<?php
$search_string=mb_strtolower('search_string','utf-8');?>
И поправить запрос
SELECT nid FROM {node} WHERE LOWER(title) LIKE '%nok%' LIMIT 10
Но что-то мне говорит, что в вашем случае lower() может нормально не работать.
с LOWER пробовал - не помогло, нагуглил попробовать '%%nok%' - работает )
http://dev.mysql.com/doc/refman/4.1/en/string-comparison-functions.html#... - последний коммент
причина так и не ясна
'%%nok%%'
нет, именно '%%nok%' или правильней '%%nok%%' ??
я тут вообще смысла не пойму
db_query() в API читали?
ндя. а ларчик просто открывался
я почему-то был уверен что оно вообще работает а проблема только в регистре
Стоп-стоп!
q = "SELECT nid FROM {node} WHERE title LIKE '%nok%' LIMIT 10 ";
$res = db_query($q);
Это неправильное использование db_query(), надо так:
q = "SELECT nid FROM {node} WHERE title LIKE '%s' LIMIT 10 ";
$res = db_query($q, '%nok%');
Дело в том что запрос парсится в db_query() и % воспринимается как подстановочный символ.
читал, но не все , похоже %n - воспринимает как модификатор, соответственно неправильно формирует like
RxB благодаря вам, разобрался в чем дело
Ставим "[Решено]" и пишем решение