Twitter seach API返回一個JSON對象a.o.含鳴叫的唯一ID:如何在Twitter中存儲Twitter ID?
[id] => 2.9851634017882E+17
[text] => foobar
我在數據庫中存儲的ID創建一個MySQL bigint(20)
場。但是,當我嘗試存儲該標識時,在數據庫中它只表示2
(在本例中)。
我在做什麼錯?
Twitter seach API返回一個JSON對象a.o.含鳴叫的唯一ID:如何在Twitter中存儲Twitter ID?
[id] => 2.9851634017882E+17
[text] => foobar
我在數據庫中存儲的ID創建一個MySQL bigint(20)
場。但是,當我嘗試存儲該標識時,在數據庫中它只表示2
(在本例中)。
我在做什麼錯?
對於調用中的每個id,我建議在將值發送到PHP之前將值轉換爲字符串。
我正在用我自己的web應用程序來做這件事,它效果很好。我遇到了與API完全相同的問題。
ex。使用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
,並且是less error prone。
MySQL不知道2.9851634017882E+17
作爲INT
,因爲它不是。它將數字截斷爲它從輸入開頭找到的最長整數,即2
。你需要把它作爲一個整數,而不是用科學的記數法。另外,如果這正是您從Twitter獲得的回報,那麼您甚至不知道該ID,因爲該號碼的精確度不會落到那個位置。
你得到的ID是一個浮點數。如果twitter爲你提供漂浮物作爲ID,我會非常驚訝。
你確定JSON對象沒有被所有將整數轉換爲浮點數的東西解析嗎?當你解決這個問題時,保存該值的問題就會解決。
Twitter的ID被分類爲64-bit integers
。存儲它們是最好的行動方式。在MySQL中,數據類型爲BIGINT
。
由於不同的JSON口譯與解析BIGINT
我的首選方法鬥爭是根據自己的規格消耗飼料:
...考慮儘快轉化爲ID的_STR版本爲 可能。
作爲JSON消費者,我會解釋ID的_str
版本並將此「安全」值插入到BIGINT列中。
哎呦:這只是我想的PHP問題。 Twitter JSON給出了「id:298526548477214721」,但PHP的'json_decode'將它變成了'2.9851634017882E + 17'形式。我如何保留原始號碼? – Pr0no
json_decode(options)中的最後一個參數可以保存值JSON_BIGINT_AS_STRING,它將阻止您的整數偏移。 – arjan