You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

phpMyAdmin中BigInt值末尾始终为0的问题排查

解决Bigint插入末尾变0的问题

哎,这个问题我之前也踩过坑!核心原因是JSON解码时大数字被自动转成了浮点型(float),而float的精度不足以存储你这么长的数字,导致末尾的精确位被截断成0了。

为什么会出现这个情况?

PHP里的json_decode()默认会把JSON中的数字转成int或float:

  • 如果数字在PHP int的范围内(64位系统是9223372036854775807以内,32位是2147483647),会转成int;
  • 超过这个范围的话,就会自动转成float,但float的有效精度只有15-17位,你的1591823907560714是16位,刚好卡在精度边缘,转成float后就会丢失末尾的精确值,变成类似1591866907560700这样的结果。

怎么解决?

你需要在json_decode时指定JSON_BIGINT_AS_STRING选项,让大数字以字符串形式保留,这样就不会丢失精度:

$user = json_decode(file_get_contents("php://input"), false, 512, JSON_BIGINT_AS_STRING);

简单解释下参数:

  • 第三个参数512是递归深度,用默认值就行;
  • 第四个参数JSON_BIGINT_AS_STRING告诉解析器把超出int范围的大数字当成字符串处理,而不是转成float。

插入数据库的注意事项

拿到字符串形式的数字后,直接插入bigint字段就可以了——MySQL的bigint类型可以接收合法的数字字符串,会自动转换成对应的数值存储,不会有精度损失。

你可以先打印一下$user里的那个数值,看看是不是已经变成字符串了,确认问题解决后再插入数据库~

内容的提问来源于stack exchange,提问作者Elliott08

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:31:53