我有一个非常奇怪的行为,我在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 '
我得到了我的期望:没有。 据我所知=应该是“精确”匹配,而像是更松散,能够使用子字符串和%。
我错过了什么?
答案 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开始,它们的最大值也不同 长度以及是否保留尾随空格。