MySQL bigint(20) unsigned类型ID字段编辑器查询末位显示异常原因问询
MySQL大数字字段查询显示异常成因
- 核心原因是你使用的MySQL查询编辑器基于JavaScript实现结果渲染,触发了JS的安全整数精度溢出问题
- JS内置的
Number类型为双精度64位浮点数,可精确表示的整数范围为-2^53 ~ 2^53,最大可精确表示的正整数为9007199254740991,仅为16位长度。你表中Scan_id为bigint(20) unsigned类型,最大可存储2^64-1的超大整数,当ID长度超过16位时,编辑器会默认将返回的数值类型结果转换为JSNumber类型存储展示,超出精度的尾数会被自动舍入,就会出现末位数字异常变更的现象 - 以下两种场景能拿到正确值的原因也和类型处理逻辑有关:
- 执行
CAST(Scan_id AS CHAR)查询时,返回结果为字符串类型,编辑器不会对字符串做数值转换,因此可以完整展示原始ID - Python内置
int类型支持任意精度的整数存储,读取到数据库返回的数值后不会做精度截断,因此可以拿到正确的ID值
- 执行
- 你可以自行验证该逻辑:将编辑器显示异常的ID值复制到浏览器控制台执行,即可看到JS自动转换后的结果和编辑器展示的异常值完全一致
内容的提问来源于stack exchange,提问作者Konstantina
相关产品推荐
相关产品推荐

