不使用通配符时'='运算符和LIKE有啥区别

Posted

技术标签:

【中文标题】不使用通配符时\'=\'运算符和LIKE有啥区别【英文标题】:What's the difference between '=' operator and LIKE when not using wildcards不使用通配符时'='运算符和LIKE有什么区别 【发布时间】:2011-08-25 12:30:04 【问题描述】:

我做这个问题,因为我找不到相同原因的问题。原因是当我使用 LIKE 时,我得到了一致的结果,而当我使用 (=) 运算符时,我得到了不一致的结果。

案例 我有一个带有多个内连接和左连接的 BIG VIEW (viewX),其中一些列具有空值,因为数据库定义允许这样做。

    当我打开这个 VIEW 时,我看到例如:结果为 8 行。 当我运行例如:select * from viewX where column_int = 34 and type_string = 'xyz' 时,此查询显示 100 行,这些行未在视图结果中定义。 [不一致]

但是

    当我运行 select * from viewX where column_int = 34 and type_string like 'xyz' 时,此查询只显示 4 行,这是我打开时在视图中定义的(参见 1。)[CONSISTENT]

有人知道这里发生了什么吗?

【问题讨论】:

你能发布你的视图定义吗? 视图定义这么大,请尝试理解问题文本的问题,VIEW结果是一致的 【参考方案1】:

来自文档.....

'根据 SQL 标准,LIKE 以每个字符为基础进行匹配,因此它可以产生与 = 比较运算符不同的结果:'

更重要的是(使用 LIKE 时):

'字符串比较不区分大小写,除非其中一个操作数是二进制字符串'

来自: http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html

【讨论】:

【参考方案2】:

Per the MySQL documentation LIKE 的功能与= 不同,尤其是当您有尾随或前导空格时。

您需要发布您的实际查询,但我猜它与已知差异有关。

【讨论】:

以上是关于不使用通配符时'='运算符和LIKE有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

sql server 中 in 和like 有啥区别?

mysql怎么用like检索字段中带有数字的语句?

MySQL中的Like和正则表达

MySQL中like使用 % 和 _ 的区别

为啥 MySQL 在使用带有通配符的 LIKE 运算符时会忽略假名敏感?

postgresql数据库中~和like和ilike的区别