日期:2014-05-18  浏览次数:20482 次

uniqueidentifier的长度问题?
SQL code

declare @temp varchar(36)
set @temp=newid()
select @temp --52337445-56FD-456E-9AF4-F83CFC5C4016
select len(@temp) --36
select datalength(@temp) --36
select len(newid()) --36
select datalength(newid()) --16



《SQL Server 2005数据库开发实战》第51页定义如下:
Uniqueidentifier存储大小为16个字节

我的问题来了:
16个字节=32个字符
GUID: 52337445-56FD-456E-9AF4-F83CFC5C4016 的长度为36,它怎么存的下呢?

------解决方案--------------------
52337445-56FD-456E-9AF4-F83CFC5C4016中间含4个连接号"-"

所以,36-4=32, right?
------解决方案--------------------
GUID在存储的时候是不存储那四个连接号的,所以是36-4=32.而GUID的字符都是十六进制的,一个16进制用四位表示,一个字节8位,所以32 * 4 /8 =16字节,这是在数据存储层面的。
而查出来的GUID是根据数据加上连接符组成的特定“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”格式,所以字符数是36,这是表示层面的。