← 返回博客

什么是 GUID,与 UUID 有什么区别

2026-04-04 · 5 分钟阅读

GUID 的定义

GUID(Globally Unique Identifier,全局唯一标识符)是 Microsoft 对 UUID(Universally Unique Identifier)的称呼和实现。GUID 与 UUID 在技术上是同一个东西:都是 128 位的唯一标识符,遵循相同的格式规范(RFC 4122)。Microsoft 在 COM(组件对象模型)和 Windows API 中广泛使用 GUID 来标识组件、接口、驱动程序和其他系统资源。一个典型的 GUID 看起来像:{550e8400-e29b-41d4-a716-446655440000}(注意 Microsoft 风格通常带有花括号)。

GUID 的历史来源

GUID 由 Microsoft 在 1990 年代初引入,用于解决 COM 组件注册表中的命名冲突问题。当时 Microsoft 基于 OSF DCE(开放软件基金会分布式计算环境)的 UUID 标准,将其集成到 Windows 系统中。COM 系统需要在 Windows 注册表中注册每个组件,GUID 确保了不同厂商的组件不会使用相同的标识符。后来,GUID 的概念扩展到 SQL Server、.NET Framework、Active Directory 等 Microsoft 技术栈的方方面面,成为 Windows 生态系统中最常见的唯一 ID 形式。

GUID 与 UUID 的格式差异

技术上 GUID 和 UUID 格式完全相同(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx),但在表示习惯上有一些差异:Microsoft 文档和工具(如 Visual Studio、SQL Server Management Studio)通常在 GUID 外加花括号,例如 {6BA7B810-9DAD-11D1-80B4-00C04FD430C8};Windows 注册表中的 GUID 总是带花括号;而在 Linux/Unix 生态系统和 Web 开发中,UUID 几乎从不带花括号。在大小写上,Microsoft 传统上偏向大写十六进制,而 RFC 4122 推荐小写,但两者都是合法的。

GUID 在 Microsoft 技术栈中的应用

GUID 在 Microsoft 生态中无处不在:SQL Server 的 uniqueidentifier 数据类型用于存储 GUID,内置 NEWID() 函数生成新 GUID;.NET Framework 和 C# 中有内置的 System.Guid 结构体,提供生成、解析和格式化 GUID 的方法;COM/DCOM 中每个接口(IID)、类(CLSID)、类别(CATID)都用 GUID 标识;Windows 安装程序(MSI)使用 GUID 标识产品和组件;Active Directory 中每个对象有一个 objectGUID 属性作为全局唯一标识符。

在 C# 中生成和使用 GUID

// C# 中的 GUID 操作
using System;

// 生成新 GUID
Guid newGuid = Guid.NewGuid();
Console.WriteLine(newGuid);           // 小写,无花括号
Console.WriteLine(newGuid.ToString("B")); // {带花括号}
Console.WriteLine(newGuid.ToString("D")); // 标准格式
Console.WriteLine(newGuid.ToString("N")); // 无连字符
Console.WriteLine(newGuid.ToString("P")); // (带圆括号)

// 解析 GUID 字符串
Guid parsed = Guid.Parse("{550e8400-e29b-41d4-a716-446655440000}");
Guid.TryParse("invalid", out Guid result); // 安全解析

// SQL Server
// SELECT NEWID()  -- 生成新 GUID
// SELECT NEWSEQUENTIALID()  -- 生成顺序 GUID(性能更好)

跨平台互操作注意事项

当 GUID 需要在 Microsoft 平台和非 Microsoft 平台之间传递时,需要注意几点:去掉花括号(非 Microsoft 系统通常不接受带花括号的格式);统一大小写(建议统一为小写以符合 RFC 4122 规范);某些 Microsoft 系统内部对 GUID 字节的存储顺序与标准 UUID 有所不同(特别是前三个字段使用小端字节序),这在直接操作字节时需要注意,但字符串表示形式是一致的。

实际中 GUID 和 UUID 可以互换使用吗

在字符串表示层面,GUID 和 UUID 可以完全互换使用(去掉花括号、统一大小写后)。一个由 C# Guid.NewGuid() 生成的 GUID 与一个由 Python uuid.uuid4() 生成的 UUID 在格式和功能上完全等价。只有在直接操作二进制表示时(如在 SQL Server 中使用 varbinary 存储),才需要注意字节序差异。在 Web API、数据库(使用 varchar/text 存储 UUID 字符串时)、日志系统等场景,GUID 和 UUID 可以无缝互操作。

立即免费使用相关工具

免费使用 →