2014-09-10 136 views
1

我有一個包含所有名字的數據表。該表是唯一一個cloumn 「名」(VARCHAR)當我這樣做Where子句什麼都沒有返回MySQL

select * from name

將返回所有行

通過當我做

select * from name where name="(a name which is in the database)" 

什麼都不會返回(我已經嘗試了很多名字,都在表格中)。當我做

select * from name where length(name)>0; 

它會再次返回所有行。

什麼可能是錯的?

我試過SELECT name, length(name), MD5(name) FROM name,長度比字符串長度重新變大一個數字。我試圖把一個空間放在前面,然後用一個空格嘗試,但這些方法都沒有幫助。

+0

請告訴表結構。 – diEcho 2014-09-10 12:10:49

+0

任何錯別字?空間或其他角色? – 2014-09-10 12:10:54

+0

@XLAnt:沒有那樣的, 字符串是一個字節或字符序列,包含在單引號'(「'」)'或雙引號'(「」「)中' – diEcho 2014-09-10 12:12:24

回答

1

我敢打賭,你有不可見的字符,如空格或換行符或回車字符串。

試試這個:

select * from name where replace(replace(trim(name), '\r', ''), '\n', '') = 'your_name'; 

如果這產生一個結果,你應該更新你的表刪除這些字符。

+1

您是缺少一個參數給你的外部替換:'替換(替換(trim(name),'\ r',''),'\ n'--HERE--,'' -/HERE--)' – scragar 2014-09-10 12:17:49

+0

@scragar謝謝,修正了它。 – fancyPants 2014-09-10 12:18:41

+0

謝謝,字符串中有一個不可見的/ n或/ r :) – hln 2014-09-10 12:35:03