2015-02-24 22 views
0

我正在使用MySQL 5.5.37。如果我在我的數據庫上運行以下查詢如何讓額外的空白影響我的MySQL查詢結果?

select count(*) FROM user where user_name = 'admin'; 

我得到結果「3」。然而,當我執行查詢

select count(*) FROM user where user_name = 'admin  '; 

,(注意「管理」一詞後,多餘的空格,我也得回結果「3」。事實上,當我看到德記錄,他們是與第一個查詢相同的記錄,但是,我的數據庫中沒有記錄,其中user_name字段等於「admin」。鑑於此時我無法升級我的MySQL數據庫,我該怎麼做才能確保第二個查詢(用wiht多餘的空白)返回正確的結果(即 「0」)

編輯:?的USER_NAME字段的類型爲varchar(50)的

回答

1

我不是100%確定是這種情況,但它看起來像你的user_name字段是char(n)字段而不是varchar(n)。

這樣的字段充滿了空格以完全匹配字段的長度,而varchars是(我相信)以null結尾的字符串。

這兩個查詢都返回相同的答案,因爲它們還用空格填充缺少的字符。

如果您希望查詢正常工作,請考慮將列的類型更改爲varchar。

+0

我編輯的qesution。該字段已經鍵入「VARCHAR(50)」 – Dave 2015-02-24 21:35:34

0
select count(*) FROM [sb_user] where user_name = 'admin  '; 

,你可以嘗試這一個

+0

這會導致錯誤「ERROR 1064(42000):您的SQL語法錯誤;請查看與您的MySQL服務器版本對應的手冊,以查找在[user]附近使用的正確語法where user_name ='admin''在第1行「 – Dave 2015-02-24 21:49:43

+0

您可以嘗試選擇計數(*)從[sb_user]其中user_name LIKE'admin'; – 2015-02-24 22:01:07

+0

根據我對其他受訪者的評論,它不是更改我的應用程序中的每個查詢的選項。如果user_name的值不是'admin',那麼MySQL應該準確地返回該值。 – Dave 2015-02-24 22:53:01