在mysql里设置了字段类型是bigint的,20位
然后通过php读取数组出来,使用json_encode
在不同的环境下,有不同的表现
1、这个字段在json中是字符串类型的,
2、这个字段读取出来是数字类型的,那么问题就来了,这个时候json_decode出来的结果是科学计算法的 + e。
这样对前端使用,就有了苦难。
想问,这个读取出来不同的类型,是跟什么配置有关?php 的配置,mysql的配置。
我现在的作法就是不管,在最后输出的时候,都转换一次,变成字符串。
立即学习“PHP免费学习笔记(深入)”;
补充一下
肯定不是32位、64位系统的问题。
同样的表结构设计,同样的64位环境
比如数组:144781210120784720
我的电脑取出来的值就是 字符串类型的 "144781210120784720",所以json都没问题
服务器去取出来的就是数字类型的,所以json变成了+3
SmartB2B 是一款基于PHP、MySQL、Smarty的B2B行业电子商务网站管理系统,系统提供了供求模型、企业模型、产品模型、人才招聘模型、资讯模型等模块,适用于想在行业里取得领先地位的企业快速假设B2B网站,可以运行于Linux与Windows等多重服务器环境,安装方便,使用灵活。 系统使用当前流行的PHP语言开发,以MySQL为数据库,采用B/S架构,MVC模式开发。融入了模型化、模板
0
在mysql里设置了字段类型是bigint的,20位
然后通过php读取数组出来,使用json_encode
在不同的环境下,有不同的表现
1、这个字段在json中是字符串类型的,
2、这个字段读取出来是数字类型的,那么问题就来了,这个时候json_decode出来的结果是科学计算法的 + e。
这样对前端使用,就有了苦难。
想问,这个读取出来不同的类型,是跟什么配置有关?php 的配置,mysql的配置。
我现在的作法就是不管,在最后输出的时候,都转换一次,变成字符串。
立即学习“PHP免费学习笔记(深入)”;
补充一下
肯定不是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类型,应该可以解决你的问题吧。
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号