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。