【问题标题】:PHP mysql bigint issuePHP mysql bigint问题
【发布时间】:2013-05-04 12:58:35
【问题描述】:

我有两个带有 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 本地计算机上,在服务器上一切正常,至少目前是这样。

任何帮助将不胜感激。

【问题讨论】:

  • 这可能是您所说的 MySQL 问题,但还要确保 PHP 代码中没有任何内容导致数字转换为 PHP 整数。 MySQL bigint 比 PHP int 可以处理的大,因此请确保始终将其作为字符串保存在 PHP 中。
  • 你确定其中一个不是 bigint unsigned 而另一个不是已签名?这会导致您描述的问题。
  • @Alasdair 是的,我确定 ...
  • @MattBrowne 感谢马特,我采取了错误的方法,我应该将它们视为字符串。

标签: php mysql


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    至少在某些 64 位操作系统(例如 FreeBSD AMD64)下的 PHP 使用 8 字节 int 也是如此,可通过测试验证

    echo 'int 的大小是 '.PHP_INT_SIZE ;

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

    【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2018-07-13
      • 2014-07-05
      • 1970-01-01
      相关资源
      最近更新 更多