什么是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)将是一个不错的选择。

    链接地址: http://www.djcxy.com/p/91465.html

    上一篇: What is the string length of a GUID?

    下一篇: UUDI/GUID primary key in MySQL