2011-09-27 35 views
34

我已經看到了多個尺寸,我不想浪費在MySQL字段上的服務器內存,因爲它爲太多字符保留了太多空間。他們能夠獲得的最大收益是什麼,並且這會不會改變?什麼是最大值。 Facebook用戶的長度?

+2

文檔中沒有任何限制。至於「它會不會改變」 - 這就是我們正在談論的Facebook;急劇的API變化是司空見慣的。所以,儘管UID非常重要,但我不會相信FB *不會*在未來的任何時候改變它,因爲他們可能會感覺如此。最好把它當作一串不透明的字符。 – Piskvor

+3

對於Mysql,請使用UNSIGNED BIGINT;請參閱:http://stackoverflow.com/questions/2172126/user-id-big-int-int-or-string – Costa

回答

63

這是整數溢出,integer-> string migrations等等,通過使數據類型過於限制。在128b varchar的幾個字節上跳出來,節省您在路上的麻煩。如果您的用戶基礎變得如此之大以至於您需要擔心通過處理UID的數據類型來節省多少字節,請認爲自己是一個巨大的成功,這是您將很樂意解決的問題。

簡短的回答,我不認爲任何人都能回答你的問題,「永遠」很長一段時間,誰知道Facebook有多少實體奴役。

我會以最好的一個人的話引用結尾;

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. 
—Donald E. Knuth 
+0

同意。謝謝! =) –

+0

這是一個很好的答案。我只是有這個確切的問題。以前,我係統中的所有Facebook ID都不超過10位數字,但Facebook最近更改了這個ID,所以ID是15位數字。我開始看到具有相同Facebook ID的多個用戶,並且不認識到「ID」實際上是最大整數值。我把我的領域改爲了一個varchar,併爲後人提供了大量的填充。 – Gavin

+0

對於VARCHAR +1因爲這樣:Javascript中的parseInt(「10208914157005637」)返回10208914157005636 !!! –

2

你怎麼能確定這永遠不會改變?最好使它成爲一個varchar。

-8

Facebook的UID永遠不會改變,因爲它是他們數據庫中的唯一標識符。如果它改變,那麼Facebook將停止工作

+4

不會下注,他們可以例如決定切換到使用字母數字UID而無需更新現有的..這當然不太可能改變,但從來沒有說過從來沒有... – ivanhoe

+2

我知道這是一箇舊帖子,但谷歌帶我到這裏。 Facebook的UIDs確實在這個時候改變!每個Facebook應用程序都會看到具有不同UID的相同用戶。 AppId + UserId的組合應該永遠不會改變,因爲它被設計爲由Facebook應用程序處理,所以你很可能依靠它。 此刻,我的測試指出用戶ID爲17個字符長。此時,我在facebook上將它聲明爲facebook_id varchar(50),因爲你永遠不知道下一個用戶的id是什麼。 :-o –

2

目前,Facebook UID是64位整數。但我不能保證有一天不會改變。