2016-01-13 88 views
0

这里的时候,不返回任何结果是我使用的命令:MySQL的搜索栏

SELECT * FROM pos WHERE word = 'accelerator' OR id = 3; 

这将返回:

'3', 'accelerator\r', '1', NULL, NULL, NULL, NULL, NULL, NULL, NULL 

但是当我使用:

SELECT * FROM pos WHERE word = 'accelerator'; 

我得到NULL作为回应。

这里是我的表结构

enter image description here

+0

是吗?没有行,其中'word ='accelerator'',也许你想'SELECT * FROM pos WHERE trim(BOTH'\ r'word)='accelerator';'? –

+0

按设计工作,不是吗? ''accelerator'r'与'accelerator''有所不同 –

+0

由于没有找到行,它返回NULL。您搜索“'accelerator'”,但列值是'accelerator \ r'(注意'\ r')。如果你想按字符串的一部分搜索,那么使用'word LIKE'%accelerator%'(百分号表示任意数量的任何字符)。 – djxak

回答

2

“加速器”与“加速器\ r”不同。所以看起来你已经插入了数据而没有剥离它们。为了验证使用:

SELECT * FROM pos WHERE word = 'accelerator\r' 

它应该返回行

0
'accelerator\r' !== 'accelerator' 

您可以代替考虑使用LIKE这样的:

SELECT * FROM pos WHERE word LIKE '%accelerator%'; 

将返回正确的结果给你。

0

'accelerator\r'通知\r在字符串的结尾。

这应该工作:

SELECT * FROM pos WHERE word LIKE 'accelerator%' 
0

让我们来看看你的where条款:

WHERE word = 'accelerator' OR id = 3; 

这是真的,如果两个操作数中至少有一个为真。对于给定的记录,条件是成立的,因此至少有一个操作数对它是真实的。让我们来看看你的其他条款:

WHERE word = 'accelerator'; 

这一个更严格,不会产生给定的记录。使用第二where条款你看有没有一行'accelerator'word的价值,但是,你已经找到使用你的第一个where条款,其中有'acclerator\r'word,从'accelerator'不同的记录,但其id3,因此,根据您的第一条where条款,该记录符合您的条件,因为至少有一个OR的操作数为真。