Shi*_*mmy 335 .net varchar guid sql-types string-length
我想在SQL中应包含创建VARCHAR列N'guid'
而guid
被生成由.NET GUID(Guid.NewGuid) -类的System.Guid.
varchar
我应该从GUID中获得的长度是多少?它是静态长度吗?
我应该使用nvarchar
(GUID会使用Unicode字符)吗?
varchar(Guid.Length)
Run Code Online (Sandbox Code Playgroud)
PS.我不想使用SQL行guid数据类型.我只想问是什么Guid.MaxLength
.
ste*_*ell 723
这取决于你如何格式化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}}
Eri*_*ric 63
36,GUID只使用0-9A-F(十六进制!).
12345678-1234-1234-1234-123456789012
这是任何GUID中的36个字符 - 它们具有恒定的长度.您可以在此处阅读有关GUID复杂性的更多信息.
如果要存放牙箍,则需要两个长度.
注意:36是字符串长度,中间用破折号.它们实际上是16字节的数字.
Mar*_*ell 30
这里正确的做法是将其存储为uniqueidentifier
- 然后在数据库中完全可索引等.下一个最佳选项是binary(16)
列:标准GUID的长度恰好是16个字节.
如果必须将其存储为字符串,则长度实际上取决于您选择如何编码.作为没有连字符的十六进制(AKA base-16编码),它将是32个字符(每个字节两个十六进制数字),所以char(32)
.
但是,您可能希望存储连字符.如果空间不足,但数据库本身不支持blob/guid,则可以使用Base64编码并删除==
填充后缀; 这给你22个字符,所以char(22)
.没有必要使用Unicode,也不需要可变长度 - nvarchar(max)
例如,这将是一个糟糕的选择.
小智 6
22 字节,如果你这样做:
System.Guid guid = System.Guid.NewGuid();
byte[] guidbytes = guid.ToByteArray();
string uuid = Convert.ToBase64String(guidbytes).Trim('=');
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
所以是的,最多20个字符,这实际上浪费了超过4.25位,所以你可以使用比95更小的基数同样有效; base 85是最小的,仍然适合20个字符:
0 through -r54lj%NUUO[Hi$c2ym0 (base 85, using 0-9A-Za-z!"#$%&'()*+,- chars)
Run Code Online (Sandbox Code Playgroud)
:-)