什么是GUID的字符串长度?
我想在SQL中创建一个应该包含N'guid'
的varchar列,而guid
是由.NET(Guid.NewGuid) - 类System.Guid生成的GUID。
什么是我应该期望从一个GUID varchar
的长度? 它是一个静态长度吗?
我应该使用nvarchar
(GUID是否会使用Unicode字符)?
varchar(Guid.Length)
PS。 我不想使用SQL行guid数据类型。 我只是问什么是Guid.MaxLength
。
这取决于你如何格式化Guid:
Guid.NewGuid().ToString()
=> 36个字符(连字符)
输出: 12345678-1234-1234-1234-123456789abc
Guid.NewGuid().ToString("D")
=> 36个字符(连字符,与ToString()
相同)
输出: 12345678-1234-1234-1234-123456789abc
Guid.NewGuid().ToString("N")
=> 32个字符(仅数字)
输出: 12345678123412341234123456789abc
Guid.NewGuid().ToString("B")
=> 38个字符(大括号)
输出: {12345678-1234-1234-1234-123456789abc}
Guid.NewGuid().ToString("P")
=> 38个字符(圆括号)
输出: (12345678-1234-1234-1234-123456789abc)
Guid.NewGuid().ToString("X")
=> 68个字符(十六进制)
输出: {0x12345678,0x1234,0x1234,{0x12,0x34,0x12,0x34,0x56,0x78,0x9a,0xbc}}
36,并且GUID将只使用0-9A-F(十六进制!)。
12345678-1234-1234-1234-123456789012
这是任何GUID中的36个字符 - 它们的长度不变。 您可以在这里阅读更多有关GUID错综复杂的内容。
如果你想存储大括号,你将需要更多的长度。
注意:36是中间有破折号的字符串长度。 它们实际上是16字节的数字。
这里要做的正确的事情就是将它作为uniqueidentifier
存储 - 然后在数据库中完全索引等。 次最佳选项是一个binary(16)
列:标准GUID长度恰好为16个字节。
如果你必须把它作为一个字符串存储起来,那么这个长度真的取决于你如何选择编码它。 作为不带连字符的十六进制(AKA base-16编码),它将是32个字符(每个字节两个十六进制数字),因此char(32)
。
但是,您可能想要存储连字符。 如果空间不足,但数据库本身不支持blob / guid,则可以使用Base64编码并删除==
填充后缀; 这给你22个字符,所以char(22)
。 没有必要使用Unicode,也不需要可变长度 - 例如, nvarchar(max)
将是一个不错的选择。