在 MySQL 中使用 LIKE 命令给出奇怪的结果

Posted

技术标签:

【中文标题】在 MySQL 中使用 LIKE 命令给出奇怪的结果【英文标题】:Using LIKE command in MySQL giving weird results 【发布时间】:2013-09-11 02:30:02 【问题描述】:

我是 mysql 新手,但在 Intranet 开发中使用 Access 多年。最近开始使用 MySQL 数据库并将我的头发拉出来。 LIKE 命令对确实存在的记录给出不稳定的结果或没有结果。

一个名为“Clients”的表,其中包含一个名为“BusinessName”的列。例如,一条记录是“FRED SMITH CONSTRUCTIONS”。

Select * from Clients where BusinessName LIKE '%FRED%' -- returns true.
Select * from Clients where BusinessName LIKE '%FRED SMITH%' -- returns false!
Select * from Clients where BusinessName LIKE '%FRED%SMITH%' -- returns false!
Select * from Clients where BusinessName LIKE '%FRED%S%' -- returns true.
Select * from Clients where BusinessName LIKE '%FRED%SM%' -- returns false!
Select * from Clients where BusinessName LIKE '%FRED%S%C%' -- returns true.

它非常不稳定,对我来说毫无意义。任何超过 1 个单词,它似乎会让人感到困惑。就像 % 通配符在单词之间不起作用,或者如果第二个单词中有多个字符。

为了让我摆脱麻烦,我分别搜索每个单词,但这显示了太多结果。例如

Select * from Clients where BusinessName LIKE '%FRED%' or BusinessName LIKE '%SMITH%' 

返回真。

有什么建议吗?列类型为文本。尝试RLIKE,结果相似。

【问题讨论】:

我想说你的第一个问题是使用TEXT 类型。这是一个 CLOB 类型。切换到VARCHAR,您的问题可能会消失 另外,我在这个演示中没有看到相同的结果 - sqlfiddle.com/#!2/cd9de/3 仔细检查您的数据。问题就在那里。 我猜你的空间不是真正的空间(或不是一个空间)。 您是否查看过 MATCH AGAINST?您将需要搜索字段的全文索引 【参考方案1】:

您的列字符集可能不是您所期望的。 MySQL 安装通常默认为 ISO8859-1 以外的其他内容。

【讨论】:

以上是关于在 MySQL 中使用 LIKE 命令给出奇怪的结果的主要内容,如果未能解决你的问题,请参考以下文章

MySQL LIKE 子句

MySQL LIKE 子句

使用 OLEDBREADER 和 MS Access 的 LIKE 命令问题

为啥 printf() 在 python 中给出一个奇怪的输出?

《零基础》MySQL LIKE 子句(十六)

使用 'Like' 的 Sql Query 正在给出结果,但使用 '=' 不会在 Oracle 中返回任何结果