OneKitTools logoOneKitTools
developer1 分钟阅读

"UUID vs ULID vs CUID:2026年应该使用哪种唯一ID格式?"

UUID、ULID、CUID、NanoID——ID格式太多了。清晰解释每种格式的工作原理、失败场景,以及为数据库、API或URL选择哪种最合适。

OneKitTools Team2026年4月14日

为什么唯一ID比看起来更复杂

你需要为数据库行、API资源、会话令牌生成唯一标识符。简单,对吧?用一个数字就行了。

顺序整数的问题:它们是可预测的(/users/1/users/2)——任何人都可以枚举你的资源。它们需要一个中央权威(只有一台服务器能决定"下一个"数字)。而且它们会泄露业务信息(你的第1000个订单ID就是1000)。

于是世界发明了更好的ID方案。然后不断发明新的。以下是每种方案的真实功能。

UUID(v4)——默认安全选项

格式: 550e8400-e29b-41d4-a716-446655440000 长度: 36个字符(32位十六进制 + 4个连字符) 随机性: 122位

UUID v4是以标准格式表示的122位随机数。碰撞概率低得惊人(每秒生成10亿个UUID持续85年,才有50%的碰撞概率),实际上不可能发生。

UUID的优点:

  • 通用标准——每种语言、数据库和框架都有原生支持
  • 无需协调——任何服务器或客户端都可以独立生成
  • 非顺序——不存在枚举攻击

UUID的缺点:

  • 不可排序——UUID是随机的,不能按创建时间排序。在B树索引(大多数数据库的工作方式)中,随机插入会导致"页面分裂"——数据库不断重组其索引。大规模时,这代价高昂。
  • 较大:字符串形式36个字符,二进制16字节
  • 不是URL友好的(包含连字符)

何时使用UUID v4: 需要广泛支持的标准ID,且不关心排序顺序时。


UUID v7——改进版UUID

格式: 018e2c4c-3d12-7f3a-91f8-3e4a5b6c7d8e 长度: 36个字符 随机性: 74位(带48位毫秒时间戳前缀)

UUID v7(2023年批准)是带时间戳前缀的UUID。前48位是毫秒级Unix时间戳,使UUID可按创建时间排序。

为什么重要: 可排序ID = B树顺序插入 = 大规模时数据库索引性能大幅提升。

何时使用UUID v7: 想要UUID兼容性,但需要按时间排序的ID来提升数据库性能时。


ULID——可排序、URL安全的UUID替代方案

格式: 01ARZ3NDEKTSV4RRFFQ69G5FAV 长度: 26个字符 随机性: 80位(带48位毫秒时间戳前缀)

ULID(通用唯一字典序可排序标识符)用更简洁的格式解决了UUID的排序问题。它将48位时间戳 + 80位随机数编码为Crockford Base32(无连字符,无歧义字符)。

ULID的优点:

  • 字典序可排序(作为字符串正确排序)
  • URL安全(无连字符或特殊字符)
  • 26个字符 vs UUID的36个——更紧凑
  • 内嵌毫秒精度时间戳

ULID的缺点:

  • 不如UUID通用——大多数语言需要额外库
  • 单调性:同一毫秒内生成的多个ULID在不使用单调变体时可能无法正确排序

何时使用ULID: 想要既可排序又紧凑、URL安全的ID,且不需要UUID兼容性时。


CUID2——URL安全、抗碰撞、无时间戳

格式: clyg4v5l20000356ok1f5t6nb 长度: 24个字符(默认) 随机性: 高(SHA-3指纹,无可预测结构)

CUID2专为安全敏感场景设计。与ULID不同,它故意没有时间戳前缀——无法从ID推断资源的创建时间。

CUID2的优点:

  • 比UUID/ULID更安全用于公开ID(无时序信息)
  • URL安全
  • 可配置长度(在长度和抗碰撞性之间权衡)

CUID2的缺点:

  • 不可排序(设计如此)
  • 支持不如UUID广泛
  • 依赖特定库

何时使用CUID2: ID是公开的,且不想泄露创建时间戳时(用户ID、API密钥、短链接)。


NanoID——小巧、快速、可定制

格式: V1StGXR8_Z5jdHi6B-myT 长度: 21个字符(默认,可配置) 字符集: 可定制(默认:URL安全的Base64)

NanoID是UUID的现代轻量替代方案。21个字符内与UUID v4相同的碰撞概率,但更小且字符集可定制。

NanoID的优点:

  • 最紧凑(21个字符 vs UUID的36个)
  • 可定制字符集——可以只用小写字母、只用数字等生成ID
  • 支持20+种语言
  • 速度快

NanoID的缺点:

  • 不可排序
  • 不是标准(无RFC)

何时使用NanoID: 大小很重要时(URL、短令牌),或需要自定义字符集时。


决策表

UUID v4UUID v7ULIDCUID2NanoID
可排序
URL安全
标准(RFC)
数据库性能
隐藏时间戳
大小(字符)3636262421

简单答案

  • 默认选择: UUID v7——可排序、标准、数据库性能好
  • 需要URL安全+可排序: ULID
  • 公开ID(不泄露时序): CUID2
  • 短令牌、自定义字符集: NanoID
  • 遗留系统/最大兼容性: UUID v4

立即生成ID

UUID生成器可生成UUID v4和v7——批量生成,一键复制。无需注册账号。

分享