This question already has answers here:
Trailing whitespace in varchar needs to be considered in comparison
(4个答案)
已关闭8年。
我有一个非常奇怪的行为,无法在我的SQL DB中理解(我正在使用MySQL 5.5.8):
我在一张 table 上有一个varchar(10),名字是:乔。
如果运行这样的sql:
我得到一个结果:joe,但是这是错误的,因为在表中我没有任何“joe”(末尾有空格。我只有“joe”(无空格)
但是,如果我执行:
我得到了我的期望:什么都没有。
据我所知,=应该是“精确”匹配,而like则更宽松,无法与子字符串和%一起使用。
我想念什么?
(4个答案)
已关闭8年。
我有一个非常奇怪的行为,无法在我的SQL DB中理解(我正在使用MySQL 5.5.8):
我在一张 table 上有一个varchar(10),名字是:乔。
如果运行这样的sql:
SELECT ID FROM `names` WHERE `name` = 'joe '
我得到一个结果:joe,但是这是错误的,因为在表中我没有任何“joe”(末尾有空格。我只有“joe”(无空格)
但是,如果我执行:
SELECT ID FROM `names` WHERE `name` LIKE 'joe '
我得到了我的期望:什么都没有。
据我所知,=应该是“精确”匹配,而like则更宽松,无法与子字符串和%一起使用。
我想念什么?
最佳答案
对于CHAR
或使用VARCHAR
进行的=
比较,尾随空格并不重要。参见string comparison functions: