2013-09-11 76 views
4

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

一个名为“客户”的表,其中包含名为“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%' 

返回true。

有什么建议吗?列类型是文本。试过RLIKE也有类似的结果。

+2

我想说你的第一个问题是使用'TEXT'类型。这是一个CLOB类型。切换到'VARCHAR',你的问题可能会消失 – Phil

+3

另外,我在这个演示中看不到相同的结果 - http://sqlfiddle.com/#!2/cd9de/3 – Phil

+1

仔细检查你的数据。问题在那里。 – peterm

回答

0

您的列字符集可能不是您所期望的。 MySQL安装频繁地默认为ISO8859-1之外的其他东西。