JavaScript调用mysql查询bigint数据精度失真解决方案
最近我遇上了如题这个问题,后端用node.js写了一个读取mysql数据的接口,之前使用了很久都没发现什么问题,在查询订单表的订单ID时返回的值却是错的
正确的值是
19102818002800002
但是js里返回的值却是
19102818002800000
最后一位不一定是0,但是总是失真,由于订单ID我在后续的多个地方重复使用,导致后面所有用到这个值的地方全是错的。
发现结果有错以后,层层回溯才终于找到了这个错误源。
开始时没有想明白是哪里的问题,我尝试将这个数据改短一点后发现返回的值就对了,由此诊断出这里应该是数值过大导致的精度失真
看了下数据库结构 ID是bigint类型的
想来想去只能是把这个值查询出来以后立刻赋值成string类型的,不修改接口,直接修改SQL
select *from order_info
修改成
select *,concat(id) ids from order_info
这里把id查询出来以后 将获取的值赋给 ids 这个变量,返回的josn中 我们只用res_data.ids 替代id就行
问题解决