我有两张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本地计算机上发生的,在服务器上一切正常,至少目前是这样。
非常感谢任何帮助。
答案 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版本。这真的对我有用。