美文网首页js css html
记一次线上bug:请求入参没有trim()导致查询失败

记一次线上bug:请求入参没有trim()导致查询失败

作者: 小胖学编程 | 来源:发表于2022-09-26 16:39 被阅读0次

现象:对外提供的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值进行比较都忽略尾部空格

相关文章

网友评论

    本文标题:记一次线上bug:请求入参没有trim()导致查询失败

    本文链接:https://www.haomeiwen.com/subject/muofartx.html