2016-01-13 92 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的操作數爲真。