Home  >  Article  >  Backend Development  >  php mysql bigint 类型

php mysql bigint 类型

WBOY
WBOYOriginal
2016-06-06 20:24:182668browse

在mysql里设置了字段类型是bigint的,20位
然后通过php读取数组出来,使用json_encode
在不同的环境下,有不同的表现
1、这个字段在json中是字符串类型的,
2、这个字段读取出来是数字类型的,那么问题就来了,这个时候json_decode出来的结果是科学计算法的 + e。
这样对前端使用,就有了苦难。

想问,这个读取出来不同的类型,是跟什么配置有关?php 的配置,mysql的配置。
我现在的作法就是不管,在最后输出的时候,都转换一次,变成字符串。

补充一下
肯定不是32位、64位系统的问题。
同样的表结构设计,同样的64位环境
比如数组:144781210120784720
我的电脑取出来的值就是 字符串类型的 "144781210120784720",所以json都没问题
服务器去取出来的就是数字类型的,所以json变成了+3

回复内容:

在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的值是一样的.

<code class="mysql">SELECT CAST(12345678901234567890 AS CHAR(20)) AS COL
FROM TB</code>

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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn