Тупой вопрос: WHERE name = 'бла'

Shasoft

Новичок
Тупой вопрос: WHERE name = 'бла'

Вопрос достаточно простой:
Выбираю из таблицы по условия WHERE name='бла'
Находятся все записи 'бла', 'блабла', 'бла2' и т.п.

ЧТО надо написать, чтобы выбиралось только 'бла'.

P.S. Попытался поискать погуглить, но ничего путного не нашел, так как не могу нормально сформировать область поиска.

P.S.S. Можно ответить и сразу тему закрывать, так тут то обсуждать нечего. Лучше, конечно, ткнуть в нужный раздел фака или какую-нибудь статью на эту тему.
 

DiMA

php.spb.ru
Команда форума
повторяю второй раз
из phpMyAdmin экспорт структуры или SHOW CREATE
 

Shasoft

Новичок
CREATE TABLE /*!32312 IF NOT EXISTS*/ `zmodels` (
`ID` int(11) NOT NULL auto_increment,
`COMPANY` varchar(128) character set cp1251 NOT NULL default '' COMMENT 'Название компании-производителя',
`MODEL` varchar(128) character set cp1251 NOT NULL default '' COMMENT 'Модель телефона',
PRIMARY KEY (`ID`),
KEY `MODELS` (`COMPANY`,`MODEL`,`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=310 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;


SELECT * FROM zmodels WHERE COMPANY='Nokia' AND MODEL='3110'

Выбираются и '3110' И '3110c'
 

DiMA

php.spb.ru
Команда форума
CHARSET=utf8 COLLATE=utf8_unicode_ci;
смени на cp1251 и cp1251_general_ci
 

Shasoft

Новичок
Я конечно могу ошибаться, но при чем тут кодировка?
Если бы она была неверная, то вообще бы ничего не выбралось.
У меня и таблица в UTF8 и запрос в UTF8. Тем более, что в данном случае вообще в запросе нет русских букв.

Мне cp1251 не нужно, у меня всё в UTF8
 

DiMA

php.spb.ru
Команда форума
ты проведи эксперимент, а там дальше будем думать
 

serglt

Анус, ой, Ахтунг
CREATE TABLE /*!32312 IF NOT EXISTS*/ `zmodels` (
`ID` int(11) NOT NULL auto_increment,
`COMPANY` varchar(128) character set cp1251 NOT NULL default '' COMMENT 'Название компании-производителя',
`MODEL` varchar(128) character set cp1251 NOT NULL default '' COMMENT 'Модель телефона',
PRIMARY KEY (`ID`),
KEY `MODELS` (`COMPANY`,`MODEL`,`ID`)
) ENGINE=MyISAM AUTO_INCREMENT=310 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



`MODEL` varchar(128) character set cp1251 NOT NULL default '' COMMENT 'Модель
А это у тебя тоже UTF-8 ?

Колонки ж тоже нуна в УТФ
 

Shasoft

Новичок
Всем спасибо за участие - разобрался.
Кодировка оказалась не при чем (хотя и её тоже подправил, так как это я из старого движка таблицу скопировал в новую и поставил utf8 в параметрах таблицы, а в полях cp1251 осталось).

Всё дело оказалось в моем создании запроса. У меня за работу с БД отвечает класс отдельный класс.
Я вызывал метод
PHP:
$dbClass->Query("SELECT * FROM zmodels WHERE COMPANY=#1 AND MODEL=#2",
                             $company,
                             $model);
А в Query у меня идет проверка: если переданное значение строка, то заключаю в кавычки, а если число, то нет. А в данном случае значение $model получается числовое, так что запрос преобразовывается в
PHP:
SELECT * FROM zmodels WHERE COMPANY='Nokia' AND MODEL=3110
вместо
PHP:
SELECT * FROM zmodels WHERE COMPANY='Nokia' AND MODEL='3110'
Поэтому и ошибка такая.
Хотя для меня стало неожиданностью, что с кавычками выбирается только нужное значение, а без кавычек всё, что начинается с такой строки. :(
Это стандартная фишка такая?

P.S. Следующий раз буду смотреть, что за запрос реально выполняется, а не то, что я предполагаю увидеть.

-~{}~ 22.12.08 21:06:

изменение проверки с is_numeric на is_int решило проблему.

-~{}~ 22.12.08 22:46:

Наконец-то разобрался окончательно. Если указать
MODEL=3110, то при сравнении значения значения поля таблицы преобразуется к числовому виду и из строки вида 3110c получается 3110, из-за этого и выбираются ненужные строки.
 
Сверху