Twitter 搜索 API 返回一个 JSON 对象,其中包含一条推文的唯一 ID:
[id] => 2.9851634017882E+17
[text] => foobar
我在我的数据库中创建了一个 MySQLbigint(20)
字段来存储 ID。但是,当我尝试存储 id 时,在数据库中它只说2
(在这种情况下)。
我究竟做错了什么?
对于调用中的每个 id,我建议将值转换为字符串,然后再将其发送到 PHP。
我正在用我自己的 webapp 做这个,效果很好。我在 API 上遇到了完全相同的问题。
前任。将 jquery 与 Twitter API 一起使用
$.getJSON('https://api.twitter.com/1.1/search/tweets.json?q=api&callback=?', function(data){
$.each(data, function() {
this.id_str = this.id_str + ""; // cast integer as string to avoid PHP int to float conversion on json_decode
/* ... more API parsing code ... */
还要确保您捕获的是id_str
价值而不是id
价值。在处理较大的 id 时id_str
被优先考虑id
并且不易出错。
MySQL 不理解2.9851634017882E+17
为,INT
因为它不是。它将数字截断为从输入开头找到的最长整数,即2
. 您需要将其作为 int 而非科学记数法放入查询中。此外,如果这正是您从 Twitter 获得的信息,那么您甚至都不知道 ID,因为该数字的精确度不会下降到那个位置。
你得到的 ID 是一个浮点数。如果 twitter 给你浮动作为 ID,我会感到非常惊讶。
您确定 JSON 对象没有被将所有整数转换为浮点数的东西解析吗?当您修复该问题时,保存值的问题将得到解决。
Twitter ID 被分类为64-bit integers
. 像这样存储它们是最好的做法。在 MySQL 中,它的数据类型是BIGINT
.
因为不同的 JSON 解释器难以解析BIGINT
我的首选方法是根据他们的规范使用提要:
...考虑尽快转换为 _str 版本的 ID。
作为 JSON 消费者,我会解释_str
id 的版本并将这个“安全”值插入到您的 BIGINT 列中。