什么是UUID v6
UUID v6 是 RFC 9562 给出的 v1 修正版。它保留了 v1 的字段,只是把时间戳的字节顺序重排,让时间戳落在最高位。这样 UUID 既保持了和 v1 相近的结构,又能按生成顺序排序。
它和 v7 的差别在于精度与布局:v6 沿用 v1 的 100 纳秒格里高利历时间戳,因此可以直接在 v1 数据上做有序迁移。
使用方法
- 在下拉框里选择 v6。
- 设置数量,然后点击生成 UUID。
- 生成顺序与排序结果一致,可直接作为索引键使用。
适用场景
- 把既有 v1 主键有序迁移到新表。
- 必须保留 v1 字段布局、但又要可排序的场景。
- 需要 100 纳秒精度时间戳的系统。
结构
最高的 48 位是时间戳高位,接着 4 位版本号(6)、12 位时间戳低位、2 位变体,最后是时钟序列和节点。
UUID v6 的定位
| 选项 | 何时使用 |
|---|---|
v6 | 100 纳秒时间戳,与 v1 字段对齐,便于有序迁移 |
v7 | 毫秒时间戳且不写节点;新项目直接用 v7 |
v1 | 字段相同但没有重排,因此无法按时间排序 |
UUID 各版本速查表
| 版本 | 可排序 | 数据来源 | 适合的场景 |
|---|---|---|---|
| v1 | 不可以 | 时间戳 + MAC 地址 | 仍在依赖 v1 的既有系统 |
| v3 | 不可以 | 名称的 MD5 哈希 | 必须使用 MD5 时的确定性标识符 |
| v4 | 不可以 | 122 位随机数 | 绝大多数普通的唯一标识需求 |
| v5 | 不可以 | 名称的 SHA-1 哈希 | 需要同一名称始终得到同一标识符 |
| v6 | 可以 | 重排后的时间戳 | 既要随机性又要便于排序 |
| v7 | 可以 | 毫秒精度的 Unix 时间 | 数据库主键和事件标识符 |
| v8 | 不可以 | 自定义位布局 | 专有格式和实验性用途 |
这七个版本都是 128 位,都用同样的 8-4-4-4-12 写法表示,区别只在于各个位代表什么。
代码示例
javascript
// Web Crypto 不提供 v6
const id = crypto.randomUUID();
python
# Python 3.14+
import uuid
id = str(uuid.uuid6())
sql
-- PostgreSQL 18+
SELECT uuidv6();
常见问题
v6 和 v1 有什么区别?
字段完全相同,只是时间戳的字节顺序被重排,让 UUID 能按时间排序。这也是它可以在 v1 数据上直接迁移的原因。
v6 会暴露机器信息吗?
会 —— 它保留了 v1 的节点字段,所以和 v1 一样存在暴露机器标识的风险。本工具使用随机节点值,避免这一点。
v6 与 v7 怎么选?
新项目选 v7。只有当你要和 v1 的字段布局保持兼容,或者需要 100 纳秒精度时,才选 v6。