对比

UUID v7 与 ULID 对比

两者都是 128 位,也都以 Unix 毫秒时间戳开头。它们不是同一种标识:ULID 没有版本和变体,常见文本是 Crockford base32。

UUID v7ULID
宽度128 位128 位
时间戳48 位 Unix 毫秒48 位 Unix 毫秒
时间戳之后4 位版本、12 位 rand_a、2 位变体、62 位 rand_b80 位随机数
常见文本36 字符,十六进制加连字符26 字符,Crockford base32
版本字段7没有
单调选项RFC 9562 允许;本站使用随机位ULID 规范描述了在同一毫秒里递增随机部分
原生 UUID 类型版本和变体按规范设置时可以不是。它是另一种标识

列、接口或解析器已经要求 UUID 时,用 UUID v7。周围系统已经使用 26 字符文本时,用 ULID。把字节抄过去并不会改变生成这些字节的那份规范。

常见问题

它们都是同样的 128 位吗?

两者都是 128 位,也都以 48 位 Unix 毫秒时间戳开头。ULID 后面是 80 位随机数。UUID v7 要留出 4 位版本和 2 位变体,RFC 9562 定义的随机部分是 74 位。

可以把 ULID 存进 UUID 列吗?

ULID 不是 UUID。有的代码把 16 字节 ULID 写进 uuid 列,但版本半字节就变成那些位碰巧的值。那个值不是 UUID v7。

哪种文本会排序?

ULID 的 26 位 Crockford base32 文本按时间排序。标准 UUID v7 十六进制字符串也会按毫秒排序,因为时间戳在前,连字符的位置是固定的。