32位和64位PHP和MySQL里的整型范围
博客专区 > eechen 的博客 > 博客详情
32位和64位PHP和MySQL里的整型范围
eechen 发表于2年前
32位和64位PHP和MySQL里的整型范围
  • 发表于 2年前
  • 阅读 698
  • 收藏 1
  • 点赞 0
  • 评论 3

腾讯云 新注册用户 域名抢购1元起>>>   



一个字节有8位,所以32位int型占用32位/8位=4个字节,64位int型占用64位/8位=8个字节.

32位,64位无符号整型最大值:
2^64-1 = 18446744073709551615
2^32-1 = 4294967295

32位,64位有符号整型最大值:
(2^32)/2-1 = 2147483647
(2^64)/2-1 = 9223372036854775807

减1是因为整型包括0.

64位Ubuntu 14.04,PHP_INT_MAX的值为9223372036854775807,跟MySQL中有符号的bigint型的最大值一样.
32位Ubuntu 14.04,PHP_INT_MAX的值为2147483647,跟MySQL中有符号的int型的最大值一样.
echo date('Y-m-d H:i:s', PHP_INT_MAX); 返回 2038-01-19 11:14:07
echo strtotime('2038-01-19 11:14:07'); 返回 2147483647
echo strtotime('2038-01-19 11:14:08'); 32位下返回空
也就是说,32位系统上PHP的time()最大只能返回2038-01-19 11:14:07的时间戳.

字段类型: `posted` int(10) unsigned NOT NULL DEFAULT '0'
32位MySQL上(64位MySQL也是如此),插入一个比32位无符号int型最大值 2^32-1 = 4294967295 更大的数会发生错误:
UPDATE `punbb`.`pb_topics` SET `posted` = '4294967296' WHERE `pb_topics`.`id` = 1;
Warning: #1264 Out of range value for column 'posted' at row 1
不过,MySQL可以用8个字节的bigint类型来存储64位整数.
共有 人打赏支持
eechen
粉丝 927
博文 106
码字总数 55593
作品 1
评论 (3)
Fenying
PHP5.6下INT也不支持64吧。超过32位就变成float了。7.0才完全支持64位整数
eechen

引用来自“AngusXer”的评论

PHP5.6下INT也不支持64吧。超过32位就变成float了。7.0才完全支持64位整数
Ubuntu上64位PHP5.4的PHP_INT_MAX的值为9223372036854775807,我补充上传了图片,见文章开头。
×
eechen
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: