2012-11-15 204 views
56

我們使用UUID作爲出口oracle數據庫的主鍵,並嘗試爲VARCHAR確定適當的最大字符長度。顯然這是36個字符,但我們已經注意到UUID的生成時間長於此長度 - 最多60個字符。 有誰知道適合UUID的最大字符長度?UUID最大字符長度

+2

作爲一個UUID是一個128位數字,我真的很好奇,看看哪些編碼會將其轉換爲60個字符串。看起來像是非常糟糕的編碼,或者其他一些對我來說沒有實現的問題。 – fvu

+0

你的RDBMS是什麼? MS SQL具有專用於UUID的類型,其他人可以簡單地存儲字節。是否有某些原因希望將它們存儲爲'VARCHAR'? – 2014-08-01 22:15:30

回答

97

Section 3 of RFC4122提供了UUID字符串表示的正式定義。它是36個字符--32個十六進制數字+4個破折號。

聽起來像你需要找出無效的60個字符ID來自哪裏,並決定1)如果你想接受它們,2)這些ID的最大長度可能基於任何API使用的最大長度生成它們。

40

順便說一下,這是完美的字段定義爲CHAR 36,而不是VARCHAR 36,因爲每個值將具有完全相同的長度。而且您將使用更少的存儲空間,因爲您不需要存儲數據長度以達到值,而只需存儲值。

+5

如果列上的字符集爲多字節,則CHAR可能會使用比VARCHAR更多的空間(請參閱http://stackoverflow.com/a/59686/1691446上的底部部分) – David

+2

很確定UUIDv4僅使用latin-1字符集UTF-8,在這種情況下,這不會受到影響。絕對檢查你是否使用不同的字符集。 –

+0

字符串格式的UUID只能使用這組字符(正則表達式):'[0-9A-Fa-f-]',它是ASCII中23個不同的八位字節。 – cowbert