SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 25.01.2012 12:19:45

Sagor
Участник
Зарегистрирован: 25.01.2012
Сообщений: 4

LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

Поясню: запросы

"SELECT prod FROM goods WHERE (prod REGEXP '^м') ORDER BY prod ASC"

и
"SELECT prod FROM goods WHERE (prod LIKE 'м%') ORDER BY prod ASC"

при том, что в столбце prod таблицы goods есть три записи, удовлетворяющие условиям where
(т.е. первая буква в каждой из этих записей - "м"), выдают в результате всего две из этих записей!
(если конкретно, записи в таблице: "Мартовское", "Молоко" и "Мягкий", а выдает только "Молоко" и "Мягкий").
Подобное происходит не только с этими примерами.
Самое главное: слышал, что такое может быть из-за кодировки, но вроде бы с ней все норм (см. приложенный скрин), работаю в denwer`е.
Плииз помогите... smile

Отредактированно Sagor (25.01.2012 12:53:43)


Прикрепленные файлы:
Attachment Icon mysql.bmp, Размер: 147,474 байт, Скачано: 681

Неактивен

 

#2 25.01.2012 12:30:05

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

В слове "Мартовское" первая буква не английская?
Скрин не приложили. Вместо него приведите список команд на создание, заполнение и выборку из тестового примера, чтобы можно было воспроизвести ситуацию.

Неактивен

 

#3 25.01.2012 13:05:51

Sagor
Участник
Зарегистрирован: 25.01.2012
Сообщений: 4

Re: LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

Извиняюсь, скрин добавил.
Нет, все буквы русские.
На всякий случай (чтобы уж совсем точно воспроизвести ситуацию smile) привожу код всей таблицы:

CREATE TABLE  `prod` (
 `id` INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
 `shop` TEXT NOT NULL ,
 `type` TEXT NOT NULL ,
`prod` TEXT NOT NULL ,
 `price` TEXT NOT NULL ,
 `time` TEXT NOT NULL ,
PRIMARY KEY (  `id` ) ,
KEY  `Search` (  `shop` ( 10 ) ,  `type` ( 10 ) ,  `prod` ( 10 ) ,  `price` ( 10 ) )
)

Отредактированно Sagor (25.01.2012 13:37:01)

Неактивен

 

#4 25.01.2012 13:25:31

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

Что показывает
show CREATE TABLE  `qwe`;

Неактивен

 

#5 25.01.2012 13:36:32

Sagor
Участник
Зарегистрирован: 25.01.2012
Сообщений: 4

Re: LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

Ой сори, в последнем приведенном мною коде имя таблицы должно быть prod, а не qwe (в коде запросов в начале стоит prod, ну думаю вы заметилиsmile), сейчас исправлю.
Результат "show CREATE TABLE  `qwe`;":

CREATE TABLE `goods` (\n  `id` int(10) unsigned NOT NULL auto_increment,\n  `shop` text NOT NULL,\n  `type` text NOT NULL,\n  `prod` text NOT NULL,\n  `price` text NOT NULL,\n  `time` text NOT NULL,\n  PRIMARY KEY  (`id`),\n  KEY `Search` (`shop`(10),`type`(10),`prod`(10),`price`(10))\n) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=cp1251

Неактивен

 

#6 25.01.2012 15:13:39

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

Проблема в кодировках - либо глюк пхпадмина, либо данные хранятся в неправильной кодировке.
Проверьте, какой будет результат выполнения след команд:
create table test_table (q text not null) ENGINE=MyISAM DEFAULT CHARSET cp1251;
insert into test_table values('Мягкое'),('Молоко'),('Мартовский'),('мебель');
select * from test_table where q like('м%');

Неактивен

 

#7 25.01.2012 17:49:48

Sagor
Участник
Зарегистрирован: 25.01.2012
Сообщений: 4

Re: LIKE и REGEXP выдают кривые результаты, при этом С КОДИРОВКОЙ ВСЕ НОРМ!

Ааааа, вот что обнаружил - если забить запрос сразу в phpmyadmin, то он выполняется нормально!! В чем тогда дело?

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson