2013-02-25 3 views
8

У меня очень странное поведение, которое я не могу понять в своей SQL-базе данных (я использую MySQL 5.5.8):SQL: LIKE vs = ошибка?

У меня есть в таблице varchar (10) имя: joe.

Если запустить SQL так:

SELECT ID FROM `names` WHERE `name` = 'joe ' 

я получить один результат:. Джо, но это неверно, так как в таблице у меня нет никакого «Джо» (с пробелом в конце I только «Джо» (без пробела)

Однако, если я исполню:

SELECT ID FROM `names` WHERE `name` LIKE 'joe ' 

я получаю, как я ожидал:. ничего насколько я знаю = должно быть «точное» соответствие, пока нравится больше свободно быть способный использовать его с подстроками и%.

Что мне не хватает?

+0

Это, как он предназначен. Это в документах http://dev.mysql.com/doc/refman/5.5/en/string-comparison-functions.html#operator_like –

+0

Как это дубликат? –

ответ

10

Промежуточные пробелы не имеют значения для CHAR или VARCHAR Сравнение с использованием =. См string comparison functions:

В частности, концевые пробелы являются значительными, которые не верно для CHAR или VARCHAR сравнений, выполненных с = оператора:

mysql> SELECT 'a' = 'a ', 'a' LIKE 'a '; 
+------------+---------------+ 
| 'a' = 'a ' | 'a' LIKE 'a ' | 
+------------+---------------+ 
|   1 |    0 | 
+------------+---------------+ 
1 row in set (0.00 sec) 
+1

Спасибо за ответ, я проверил документацию, и вы совершенно правы, хотя мне это кажется немного странным :), но до тех пор, пока задокументировано ... :) это особенность, а не ошибка – dk766

0

Я считаю, что это из-за типа данных ты используешь.

Типы CHAR и VARCHAR аналогичны, но отличаются тем, что они хранятся и извлекаются . Начиная с MySQL 5.0.3, они также отличаются максимальной длиной и остаются ли сохраняющиеся пробелы.

http://dev.mysql.com/doc/refman/5.0/en/char.html

Смежные вопросы