SQL:LIKE vs = bug?

时间:2013-02-25 16:18:55

标签: mysql sql database

我有一个非常奇怪的行为,我在SQL DB中无法理解(我正在使用MySQL 5.5.8):

我在表中有一个varchar(10)名称:joe。

如果运行像这样的SQL:

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

我得到一个结果:乔,但这是错的,因为在表中我没有任何'乔'(最后有一个空格。我只有'乔'(没有空格)

但是如果我执行:

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

我得到了我的期望:没有。 据我所知=应该是“精确”匹配,而像是更松散,能够使用子字符串和%。

我错过了什么?

2 个答案:

答案 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 :(得分:0)

我认为这是因为您使用的数据类型。

  

CHAR和VARCHAR类型相似,但它们的方式不同   存储和检索。从MySQL 5.0.3开始,它们的最大值也不同   长度以及是否保留尾随空格。

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