UUID 是什么,各版本有什么区别
UUID(通用唯一识别码,微软体系称 GUID)是一个 128 位的标识符,通常写成 8-4-4-4-12 共 32 个十六进制字符的形式,例如 550e8400-e29b-41d4-a716-446655440000。第三组的第一个字符表示版本,第四组的第一个字符(8、9、a、b)表示变体。它不需要中心机构分配就能在全球范围内几乎不重复,常用作数据库主键、订单号、文件名、会话 ID。
v1 基于时间戳和网卡 MAC 地址生成,有序但会泄露生成时间和机器信息;v3/v5 由“命名空间 + 名字”做 MD5/SHA-1 散列得到,同样的输入永远得到同样的 UUID,适合把 URL、域名等映射成固定 ID;v4 除版本和变体位外全部为随机数,共 122 位随机,是目前最常用的版本;v7(RFC 9562,2024 年)前 48 位是毫秒时间戳,其余为随机数,既唯一又按时间大致有序,作为数据库主键时索引性能比 v4 好得多,新项目值得优先考虑。
本工具的实现与注意事项
本页生成的是 v4 版本:优先调用浏览器原生的 crypto.randomUUID(),不支持时用 crypto.getRandomValues 取 16 个随机字节,再把第 7 个字节高 4 位设为 0100(版本 4)、第 9 个字节高 2 位设为 10(RFC 变体),完全符合 RFC 4122。随机 UUID 的重复概率极低:即使每秒生成十亿个,也要连续生成约 85 年才有 50% 的概率出现一次重复,实践中可视为唯一。
格式上,UUID 不区分大小写,规范推荐输出小写;去掉连字符后为 32 位字符串,常用于文件名或数据库 char(32) 字段;带大括号的写法常见于 Windows 注册表和 .NET。存入 MySQL 时建议用 BINARY(16) 而非 CHAR(36) 以节省空间,并注意 v4 作为 InnoDB 主键会导致随机插入、页分裂,大表可改用 v7 或雪花 ID。