记一次线上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值进行比较都忽略尾部空格

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容