【问题标题】:PHP/MYSQL problem with BIGINTBIGINT 的 PHP/MYSQL 问题
【发布时间】:2010-12-17 23:50:39
【问题描述】:

我有一个 mysql 数据库和一个表来存储来自 twitter API 的内容。当我使用来自 twitter 的 PHP 解析数据时,我使用 mysql_query 将数据插入到表中。

我对推文的 ID 有一个奇怪的问题:

例如,ID 为 15861323074113537(来自 google 的推文)的状态更新在数据库中存储为:15861323074114000(最后 4 位已更改)。

php查询是:

$sql = mysql_query("INSERT INTO $table (id,tw_text) VALUES ($id,'$tw_text')");

如果我通过 phpmyadmin 编辑记录,则会存储正确的值 (15861323074113537)。该列是 BIGINT。

所以我猜想 php 函数 mysql_query 和 INSERT 命令发生了一些奇怪的事情。

有什么想法/解决方案吗?

提前致谢

【问题讨论】:

  • 增大 int 列的大小。例如: int(64) 。里面的数字表示可用于存储 int 的位数。
  • 您确定$id 变量在您拨打电话之前持有正确的数字吗?也就是说,您是否可能错误地解析了它?你能显示评估的命令吗?
  • @ford 如果是架构问题,phpMyAdmin 也不应该能够设置正确的值

标签: php mysql sql


【解决方案1】:

好的,找到了问题,它与代码无关。 Twitter 返回 2 个 ID,其中一个最后有 000。 [id_str] => 15861323074113537 和 [id] => 15861323074114000

该死的推特 API!

抱歉给你添麻烦了:/

【讨论】:

  • 只是一个更正:从 Twitter API 返回的tweet.id 没有尾随零。如果看起来是这样,那是因为您的流程中有一个步骤正在截断数字。看一下原始 json:idid_str 将是相同的数字,尽管一个在 json 中编码为数字,一个编码为字符串。
【解决方案2】:

PHP 整数不能那么大。当使用不适合整数的数字时,会将其转换为浮点数。您可能看到的是,即使是浮点数也不够精确,无法包含那么多数字。按照 webbiedave 的建议,将其保留为字符串以避免四舍五入。

【讨论】:

  • 不,对于 64 位系统,PHP 最多可以存储 9223372036854775807
  • 这要看实现,他从来没有说过他用的是64位的电脑。
  • OP 提到存储值为15861323074114000 ...问题是最后4位重置为0000
  • 没错。如果实现将值存储在浮点数中,如果数字太多,它仍然会四舍五入。
  • 嗯?浮点数如何仍能在 15861323074114000 中表示?
猜你喜欢
  • 1970-01-01
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-14
  • 2011-06-15
  • 2010-10-26
相关资源
最近更新 更多