2011-11-07 116 views
0

我想有很長的隨機數作爲我的數據庫中的主鍵。我正在使用mysql和doctrine2。如何獲得隨機ID的

如何做到這一點的聰明的方式?我是否創建一個mysql存儲函數或者我應該創建一個Model函數?

我認爲MySQL的效果會更好,因爲ID必須是唯一的,這樣的工作更接近數據庫應該會更好。你怎麼看?

+0

你有沒有考慮使用GUID? –

+1

考慮使用常規auto_incrementing的標識,並使用一些填充/鹽析和'AES_ENCRYPT()'在MySQL生成隨機前瞻性密鑰。 aes版本看起來像垃圾,但如果需要的話,可以輕鬆地轉回到原始的簡單數字鍵。 –

+0

不知道我的問題的答案是什麼,所以我只是分散點。你在哪裏都有幫助。看起來我的問題不是,嗯。 – PiTheNumber

回答

2

使用UUID()

+0

UUID是一個不錯的主意,但我不喜歡它們的樣子;)我認爲我和Marc B一起建議使用散列函數分隔生成公共ID。儘管如此,UUID()在那裏仍然有用。 Somethink like sha1(UUID()+ primary_id) – PiTheNumber

+0

mySQL是否將UUID內部存儲爲字符串或字節[16]?只是好奇,因爲我使用UUID相當多,但我是一個Postgres傢伙.. –

1

我不是MySQL用戶,但它令我着迷,你爲什麼會想添加長數字的壓力。

我找遍四周,發現這是在MySQL數據庫中的唯一ID字段:

新表:

CREATE TABLE table_name 
(
    id INTEGER AUTO_INCREMENT PRIMARY KEY 
) 

現有表:

ALTER TABLE table_name ADD COLUMN id INTEGER AUTO_INCREMENT UNIQUE KEY; 
+1

自動遞增ID的問題是你可以猜到它們。這就是爲什麼Facebook這樣的大型網頁對所有對象都使用隨機ID的原因。 – PiTheNumber