2012-11-15 203 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