現象:對外提供的api接口,但是某一天查詢接口突然出現了異常。
原因:查詢到庫裏面的數據存在空格,而代碼中有將數據轉換成Map的處理,存在空格的數據爲key,導致無法查詢到。
解決方案:
- 使用sql查詢數據庫中存在多少存在該字段存在空格的數據。
select x_id from x_table where LENGTH(x_id) <> LENGTH(TRIM(x_id))
然後使用update語句來進行修改。
update x_table set x_id = TRIM(x_id) where LENGTH(x_id) <> LENGTH(TRIM(x_id))
- 在代碼中對字段新增trim()處理。
思索:爲什麼庫中的字段存在空格,但是查詢語句中的字段不存在空格,依舊可以查到這條記錄?
答:官方文檔上說是MySQL校對規則屬於PADSPACE,對CHAR和VARCHAR值進行比較都忽略尾部空格