SQL Server GUID到VarChar(36)或Char(36)?

时间:2011-04-17 03:19:47

标签: sql-server-2008 casting char guid varchar

我正在替换一些GUID列类型,因为我需要在MSSQL 2008中执行一些Group By工作。我准备将类型更改为Char(36),因为我知道值的确切大小,但是谷歌搜索后,我看到很多人在做Varchar(36)。在这种情况下做CHAR是不是更好?

2 个答案:

答案 0 :(得分:3)

CHAR和VARCHAR之间的区别在于如何分配空间。 CHAR字段始终是定义的大小,但是在VARCHAR字段实际上包含数据之前,它将占用0个字节。

在你的情况下,因为你总是要存储36个字符,我建议你继续使用CHAR。如果您要存储不同长度的数据,请使用VARCHAR。

但是,你真的想在GUID上使用GROUP BY吗?出于某种原因,它们被称为“全球唯一标识符”。或者你是否将它们拆分,并按GUID的某些部分进行分组(可以是相同的,但总的来说,通常都没有相同的部分)。

答案 1 :(得分:0)

快速回答:使用CHAR(36)或更好的BINARY(16)。

答案很长:你可能最好不要单独留下列类型并在查询中使用CAST。

DECLARE @a TABLE (x UNIQUEIDENTIFIER, y INT)
-- Insert some data here
SELECT
    MIN(y),
    CAST(a.x AS BINARY(16))
FROM
    @a AS a
GROUP BY
    CAST(a.x AS BINARY(16))