我正在使用将GUID值存储为varchar(36)数据类型的旧数据库:
CREATE TABLE T_Rows (
RowID VARCHAR(36) NOT NULL PRIMARY KEY,
RowValue INT NOT NULL
)
INSERT T_Rows (RowID, RowValue) VALUES (NEWID(), 1)
我认为将GUID存储为唯一标识符会更好,因为它只有16个字节而不是36个。
将GUID存储为varchar有什么好处吗?
答案 0 :(得分:13)
也许只有你可以从SELECT语句中“读取”它们的事实(尽管我认为这不是特别有用,因为你可以使用select中的函数来显示Uniqueidentifiers)。
如果表很大,每行节省20个字节是相当可观的。
答案 1 :(得分:4)
我会选择uniqueidentifier,原因很多,例如,
它将占用更少的空间;它是独一无二的,因此无法复制。这对于比较和特殊性能相关问题以及易于获得唯一默认值等更好。
我会使用uniqueidentifier,除非我因特殊原因需要使用varchar。
答案 2 :(得分:2)
如果您的数据库是Oracle,则旧版Oracle(9)中原始数据的索引性能比索引varchar(36)字段要差得多。幸运的是,这在Oracle 10和11中发生了变化。
答案 3 :(得分:1)
我相信在SQL Server 2000中添加了UNIQUEIDENTIFIER
,因此该应用程序最初可能是为SQL Server 7编写的,它不支持它。但这只是猜测,当然......
答案 4 :(得分:0)
绝对不是,因为我确信您知道遗留数据库经常会遇到设计缺陷:P因为GUID是16个字节,所以在数据库中它可能占用16个字节。你将获得每个条目20个字节