PHP mysql bigint问题

时间:2013-05-04 12:58:36

标签: php mysql

我有两张bigint表:

table1
id bigint(20) PK autoincrement
name varchar(40),
text

table2
id bigint(20) PK autoincrement
created datetime
text_field
id_table1_ref bigint(20)

将数据插入table1并尝试将table1.id插入table2.id_table1_ref后, 数字不同,即:

来自table1.t1的编号1552545662588变为1552545662,或更糟糕的是,为负数。

我知道这是设置问题,但我无法弄清楚如何管理它。 我尝试为字段设置已签名/未签名的值,但它不起作用。

这是在我的UNIX本地计算机上发生的,在服务器上一切正常,至少目前是这样。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

在将其转换为PHP之前,您需要将其转换为SQL中的字符串。在PHP中,您可以使用GMP来处理数字。

有关转换的MySQL文档:http://dev.mysql.com/doc/refman/5.7/en/cast-functions.html#function_convert

答案 1 :(得分:3)

在至少一些64位操作系统(例如FreeBSD AMD64)下,PHP也使用8字节的int,可通过

测试验证
  

echo'int的大小是'.PHP_INT_SIZE;

因此,如果您只是要运行64位操作系统,则不需要在PHP中将BIGINT作为字符串进行管理。

答案 2 :(得分:-2)

我通过更改到另一个php版本解决了这个问题,即从64位php版本更改为32位php版本。这真的对我有用。