mysql的bigint类型_php mysql bigint 类型

在mysql里设置了字段类型是bigint的,20位

然后通过php读取数组出来,使用json_encode

在不同的环境下,有不同的表现

1、这个字段在json中是字符串类型的,

2、这个字段读取出来是数字类型的,那么问题就来了,这个时候json_decode出来的结果是科学计算法的 + e。

这样对前端使用,就有了苦难。

想问,这个读取出来不同的类型,是跟什么配置有关?php 的配置,mysql的配置。

我现在的作法就是不管,在最后输出的时候,都转换一次,变成字符串。

补充一下

肯定不是32位、64位系统的问题。

同样的表结构设计,同样的64位环境

比如数组:144781210120784720

我的电脑取出来的值就是 字符串类型的 “144781210120784720”,所以json都没问题

服务器去取出来的就是数字类型的,所以json变成了+3

这跟配置无关,这跟语言有关, php的int类型的最大值是PHP_INT_MAX(你可以运行下,我这里是2147483647),超过这个值就会用科学计数法表示。

32位系统支持的php最大整形是2147483647

64位的是9223372036854775807

所以…….

MySQLi不使用prepare查询返回的字段类型全部是string,值跟数据库存储的内容一致.使用prepare时跟pdo_mysql关闭模拟预处理(PDO::ATTR_EMULATE_PREPARES => false)一样,返回的数据类型对应数据表的字段类型.

另外,拿我的环境来说(Ubuntu 14.04 AMD64),MySQL有符号bigint整型的字段最大能存储的整数是9223372036854775807,跟PHP_INT_MAX的值是一样的.

SELECT CAST(12345678901234567890 AS CHAR(20)) AS COL

FROM TB

从数据库中读取bigint时替换为varchar类型,应该可以解决你的问题吧。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值