1. 程式人生 > >MySQL中關於查詢條件中的字串空格問題

MySQL中關於查詢條件中的字串空格問題

假設當前mysql資料庫中有個表:sysuser

有個欄位是:sysUseName

欄位中有條記錄的內容是:robin

請看下面這兩個SQL語句:

SELECT * from sysuser s where s.sysUseName = 'robin'

SELECT * from sysuser s where s.sysUseName = 'robin空格'

SELECT * from sysuser s where s.sysUseName = 'RoBin空格'

這三條語句均可以查詢出那條記錄。

官方文件上說是MySQL校對規則屬於PADSPACE,對CHAR和VARCHAR值進行比較都忽略尾部空格,和伺服器配置以及MySQL版本都沒關係。

MySQL安裝目錄下有個doc目錄(Windows),裡面的 Data Types -> String Types -> The CHAR and VARCHAR Types 這一小節有對這個問題的說明以及相關的例子(版本不一樣可能章節的編號可能有變動,還是看標題吧): All MySQL collations are of type PADSPACE. This means that all CHAR and VARCHAR values in MySQL are compared without regard to any trailing spaces.?

這樣帶來的問題是:我如何需要精確匹配robin這個內容?假設有一個登陸功能,我希望使用者輸入‘robin’可以登陸,但是輸入‘robin空格’卻不能登入,該如何實現。

解決辦法如下:

SELECT * from sysuser s where s.sysUseName = BINARY 'robin '

BINARY不是函式,是型別轉換運算子,它用來強制它後面的字串為一個二進位制字串,可以理解為在字串比較的時候區分大小寫,精確匹配。

另外,因為有的MySQL特別是4.*以前的對於中文檢索會有不準確的問題,可以在檢索的時候加上binary。