MySQL运算符LIKE和=

时间:2014-04-14 07:42:06

标签: mysql sql

我有一个MySQL 5.6(在Windows 7操作系统上运行)数据库。在这个数据库中,我有一个简单的表(Bolle),它有一个名为bol_gruppo的VARCHAR(255)字段。

此数据库通过MFC应用程序填充,该应用程序通过ODBC 32连接到DBMS。现在,用户插入了一个组行,其中bol_gruppo似乎是'prova'。我说“似乎”因为如果我执行LIKE查询:

SELECT * FROM bolle WHERE bol_gruppo LIKE 'prova';

不返回任何行,而:

SELECT * FROM bolle WHERE bol_gruppo = 'prova';

给出正确的结果。 查询没有过滤器显示有bol_gruppo设置为'prova'的行。 问题出在哪儿?如何查看bol_gruppo中真正存储的内容?

1 个答案:

答案 0 :(得分:2)

问题可能是'prova'在您的数据中有一个尾随的空格,例如'prova'

如果有空格,LIKE将不返回任何结果,但是=将返回结果。

bol_gruppo ='prova'

这将在

上返回结果
.... WHERE bol_gruppo = 'prova'

“=”将对待'prova'与'prova'相同

但是

.... WHERE bol_gruppo LIKE 'prova' 

“LIKE”会对待'prova'与'prova'不一样

它将检查确切的字符串,除非使用/声明了通配符,因此这将返回0行

  

特别是,尾随空格很重要,对于使用=运算符执行的CHAR或VARCHAR比较不是这样:

http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html