如何将Twitter ID存储到MySQL中?

3
Twitter搜索API返回一个JSON对象,其中包含推文的唯一ID。
[id] => 2.9851634017882E+17
[text] => foobar

我在数据库中创建了一个MySQL bigint(20) 字段来存储id。然而,当我尝试将id存储到数据库中时,它只显示2(在此示例中)。

我做错了什么?

4个回答

2

对于调用中的每个id,我建议在将其发送到PHP之前将值转换为字符串。

我正在使用自己的Web应用程序进行此操作,效果很好。我在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_strid更可靠,因此应优先选择使用id_str,详情请参见此处


2

Twitter IDs被分类为64位整数。将它们存储为此类型是最好的选择。在MySQL中,此数据类型为BIGINT

由于不同的JSON解释器在解析BIGINT时存在问题,因此我更喜欢根据其规范使用该方法来获取信息:

...请考虑尽快转换为_ID版本。

作为JSON消费者,我会解析_str版本的ID,并将这个“安全”的值插入到您的BIGINT列中。


1
MySQL无法将2.9851634017882E+17理解为INT,因为它不是整数。它会将数字截断为从输入开头找到的最长整数,即2。您需要将其作为整数放入查询中,而不是科学计数法。此外,如果这正是您从Twitter获取的内容,则您甚至不知道ID,因为该数字的精度不足以达到个位数。

1

您获得的ID是浮点数。如果twitter给您提供浮点数作为ID,我会非常惊讶。

您确定JSON对象没有被解析器转换成浮点数吗?一旦解决了这个问题,保存该值的问题就会得到解决。


糟糕:我想这现在变成了一个PHP问题。Twitter JSON返回“id: 298526548477214721”,但PHP的json_decode将其转换为2.9851634017882E+17形式。我该如何保留原始数字? - Pr0no
3
json_decode中的最后一个参数(options)可以设置为JSON_BIGINT_AS_STRING,这将防止您的整数转换为浮点数。 - arjan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接