我想在SQL中创建一个varchar列,应该包含N'guid',而guid是由. net (guid . newguid) -类System.Guid生成的guid。

什么是varchar的长度,我应该期望从一个GUID? 它是静态长度吗?

我应该使用nvarchar (GUID将使用Unicode字符)?

varchar(Guid.Length)

PS.我不想使用SQL行guid数据类型。我只是问什么是guid。maxlength。


当前回答

36, GUID将只使用0-9A-F(十六进制!)

12345678 - the 1234-1234-1234-123456789012

在任何GUID中都是36个字符——它们的长度是恒定的。你可以在这里读到更多关于guid的复杂之处。

如果您想存储大括号,还需要两个长度。

注意:36是字符串长度,中间有破折号。它们实际上是16字节的数字。

其他回答

36, GUID将只使用0-9A-F(十六进制!)

12345678 - the 1234-1234-1234-123456789012

在任何GUID中都是36个字符——它们的长度是恒定的。你可以在这里读到更多关于guid的复杂之处。

如果您想存储大括号,还需要两个长度。

注意:36是字符串长度,中间有破折号。它们实际上是16字节的数字。

22字节,如果你这样做:

System.Guid guid = System.Guid.NewGuid();
byte[] guidbytes = guid.ToByteArray();
string uuid = Convert.ToBase64String(guidbytes).Trim('=');

我相信guid被限制为16字节的长度(或32字节的ASCII十六进制等效)。

guid是128位,或者

0 through ffffffffffffffffffffffffffffffff (hex) or 
0 through 340282366920938463463374607431768211455 (decimal) or 
0 through 11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111 (binary, base 2) or 
0 through 91"<b.PX48m!wVmVA?1y (base 95)

是的,最小20个字符长,这实际上浪费了超过4.25位,所以你可以使用比95个更小的基数;以85为基数的十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制十进制

0 through -r54lj%NUUO[Hi$c2ym0 (base 85, using 0-9A-Za-z!"#$%&'()*+,- chars)

:-)

这取决于你如何格式化Guid:

Guid.NewGuid().ToString() = 36 characters (Hyphenated) outputs: 12345678-1234-1234-1234-123456789abc Guid.NewGuid().ToString("D") = 36 characters (Hyphenated, same as ToString()) outputs: 12345678-1234-1234-1234-123456789abc Guid.NewGuid().ToString("N") = 32 characters (Digits and Letters only, no braces nor hyphens) outputs: 12345678123412341234123456789abc Guid.NewGuid().ToString("B") = 38 characters (Braces) outputs: {12345678-1234-1234-1234-123456789abc} Guid.NewGuid().ToString("P") = 38 characters (Parentheses) outputs: (12345678-1234-1234-1234-123456789abc) Guid.NewGuid().ToString("X") = 68 characters (Hexadecimal) outputs: {0x12345678,0x1234,0x1234,{0x12,0x34,0x12,0x34,0x56,0x78,0x9a,0xbc}}