2013-04-05 55 views
0

QUERY:搜索与X&Y开头的字符串,返回0结果的MySQL

SELECT * 
FROM MyTable 
WHERE SomeCol LIKE '%X & Y%' 

不返回任何结果,即使我的表中包含的行,其SomeCol = 'X & Y Some More Text'

,如果我只是寻找'%Z & J%'返回1但在该记录中SomeCol = 'Some Preceeding Text Z & J'

所以基本上它返回0行,如果&符号在空格字符串的开始处,但如果它在中间或结尾处则返回正确的行。

任何想法为什么会发生这种情况?

注:请注意%X & Y%只是一个检索串,有可能是其他字符串,我对代码的搜索,如纯字符串'%some text%'

+0

如果'X&Y'始终处于开始状态,那么您可以使用'WHERE SomeCol LIKE'X&Y%'' – 2013-04-05 15:32:55

+0

no它并不总是在开始时它可以在任何地方 – GGio 2013-04-05 15:33:19

+0

'SELECT'X&Y Some More Text 'LIKE'%X&Y%''为我返回'1',你确定没有任何问题,例如与字符或其他代码的编码? – MMM 2013-04-05 15:40:35

回答

3

我能想到的两种可能性:

1)您的搜索字符串'X & Y'包含的字符和字母之间的空格数量与数据库不同。 2)关于在数据库(或搜索词)中编码文本字符串的事情正在发生,数据实际上说的是X & Y而不是X & Y。在HTML页面中对&符号进行编码是很常见的。

请注意,column LIKE '%search-term%'将严重恶化。这种搜索不能使用索引。如果此项目旨在扩大规模,您可能需要调查全文搜索。

+0

谢谢,问题出在X & Y.有没有办法在MySQL搜索端转换任何html编码回到它的正常形式? – GGio 2013-04-05 15:54:20

+0

MySQL不会自动编码您的数据。这可能是你的应用软件。诀窍是按照您的软件将数据编码到数据库的方式进行编码。 MySQL不这样做,但你的应用程序可以。 – 2013-04-05 15:58:52

+0

明白了,会看看它。我想我有一个想法,可能会出现小故障。再次感谢 – GGio 2013-04-05 16:10:49

相关问题