記一次線上bug:請求入參沒有trim()導致查詢失敗

現象:對外提供的api接口,但是某一天查詢接口突然出現了異常。
原因:查詢到庫裏面的數據存在空格,而代碼中有將數據轉換成Map的處理,存在空格的數據爲key,導致無法查詢到。
解決方案:

  1. 使用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))
  1. 在代碼中對字段新增trim()處理。

思索:爲什麼庫中的字段存在空格,但是查詢語句中的字段不存在空格,依舊可以查到這條記錄?

答:官方文檔上說是MySQL校對規則屬於PADSPACE,對CHAR和VARCHAR值進行比較都忽略尾部空格

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章