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

MySQL查詢條件中字串包含空格的問題

2013-11-27 wcdj

問題

最近在聯調某個業務時發現使用的簽名總是驗證不過,在MySQL中查詢了該業務的私鑰配置和業務側的配置是一樣的,問題就出在SQL查詢這裡,最後將配置匯出到本地發現私鑰後面多了一個空格,將空格刪除然後簽名計算OK。問題是:為什麼在DB查詢條件中的字串沒有包含空格也可以查到實際包含空格的這條記錄呢?

原因

如果欄位是char或varchar型別,那麼在字串比較的時候MySQL使用PADSPACE校對規則,會忽略欄位末尾的空格字元,若想做到精確匹配可以使用下面幾種方法: 方法1:使用like語句; 方法2:使用binary型別,例如,select binary 'a' = 'a   ' 方法3:再新增一個length()條件,例如,select col from table where col ='a   ' and LENGTH(col)=LENGTH('a   ') 官方手冊說明(5.0版本):

11.1.6.1. TheCHAR

andVARCHARTypes

 All MySQL collations are of typePADSPACE. This means that allCHAR,VARCHAR, andTEXTvalues in MySQL are compared without regard to any trailing spaces.“Comparison”in this context does not include theLIKEpattern-matching operator, for which trailing spaces are significant.  在stackoverfolw上也可以找到類似的問題: MySQL comparison operator, spaces