\u202c特殊不可见字符引起的血案
邮箱突然收到了不少的报错日志,定睛一看是浮点数类型转换报错。如下图
<img src="https://product.liyiru.top/uploads/af973b81c279c26f03e45d5d7fe09228.png"/>
在处理数据0.00624这个浮点数的时候遇到了\u202c特殊字符,这个字符是个不可见的空字符。问了下同事最近两天是不是有更新配置,答案是有的,但是数据是从电脑计算器计算结果直接复制出来的同事认为不应该有问题。我打开了数据库看了下这个数值长度:
<code>
#先查下这个有问题的字段影响的数据范围
select count(*) from 表名 where 有问题的字段名 like '%0.00626%'
#查询结果大概有三四十条不算多
#验证下这个有问题的字段是不是真的有问题
select `有问题的字段名`, LENGTH(`有问题的字段名`) as len from 表名 where 有问题的字段名 like '%0.00626%'
#查询结果字段长度是10,原本的长度应该是7才对
#批量更新这个字段
UPDATE 表名 SET `有问题的字段` ='0.00624' WHERE 省略的限定范围... AND `有问题的字段` LIKE '%0.00624%'
</code>
这个表设计的时间有点久了,我拿到的时候发现浮点类型的字段用的varchar类型,当时可能类型尚不明确,也可能是为了方便,留下了一点隐患。总之不要相信从网页、计算器或者聊天窗口这些地方复制过来的文本,有很大概率会存在空白或者特殊字符。不是很复杂的字符推荐手打一遍或者事先验证下长度,又或者代码里面做一些剔除特殊字符的操作予以规避。
更多>>