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