UUID v7 生成器
在瀏覽器中批次生成 RFC 9562 標準的 UUID v7 ——前 48 位內嵌毫秒級時間戳,使 ID 可按生成順序排序。支援標準、大寫、無連字元、帶花括號、URN 等多種格式,且可直接存入現有的 UUID 型別列。
UUID v7、UUID v4 與 ULID 的比較
| 形式 | 長度 | 是否可按生成順序排序 | 與現有 UUID 型別列的相容性 | 說明 |
|---|---|---|---|---|
| UUID v7 | 36 個字元(含 4 個連字元) | 是(前 48 位為毫秒級時間戳) | 有(保持標準 UUID 型別、十六進位制表示) | 由 RFC 9562 標準化。由 Unix 時間戳與隨機值組成,兼顧按時間順序排序與既有 UUID 資產的相容性。本工具生成的正是此格式。 |
| UUID v4 | 36 個字元(含 4 個連字元) | 否(完全隨機) | 有(標準 UUID 型別) | 由 RFC 9562 標準化的完全隨機 128 位識別符號,不包含生成來源資訊,是目前應用最廣泛的形式。 |
| ULID | 26 個字元 | 是(前 10 個字元為時間戳) | 無(使用 Base32,需額外的列型別轉換) | 獨立於 UUID 標準(RFC 4122/9562)之外的 Crockford Base32 規範。比 UUID v7 更短,但無法直接存入原生 UUID 型別列。 |
使用小貼士
- 生成的 UUID v7 全部在瀏覽器內通過 JavaScript(Web Crypto API)處理,不會發送到 toolbase.cc 的伺服器。
- UUID v7 的前 48 位是毫秒級 Unix 時間戳,因此只需按字串排序即可還原生成時刻的先後順序。
- 可直接存入現有存放 UUID v4 的資料庫列(如 CHAR(36) 或 PostgreSQL 的 uuid 型別),遷移時無需改動應用層的型別定義。
- 「無連字元」格式便於用作 URL 路徑段或檔名;「帶花括號」格式則與 Windows COM/登錄檔中使用的 GUID 表示法一致。
- 如果在 UUID v7 與 ULID(Crockford Base32、26 個字元)之間猶豫不決:現有系統已假定使用 UUID 型別列時選 UUID v7,追求更短字串時選 ULID。
常見問題
最大的區別在於是否可按生成時間排序。UUID v4 是完全隨機的 128 位值,無法按生成順序排序;而 UUID v7 的前 48 位是毫秒級 Unix 時間戳,僅通過字串比較就能得知生成順序。
兩者都可按生成時間排序,區別在於表示形式。UUID v7 可在保持與現有 UUID 型別列、庫相容的前提下遷移;而 ULID 是更短的獨立 26 位字元 Crockford Base32 格式。若現有系統已假定 UUID 型別,選 UUID v7;若是新系統且希望字元更短,選 ULID 更合適。
於 2024 年 5 月正式作為 IETF RFC 9562 標準化。該規範在原有的 UUID v1 至 v5 基礎上,新增了重排時間戳方式的 v6 與 Unix 時間戳方式的 v7。
適合。像 UUID v4 這樣完全隨機的值會導致新行在索引中的插入位置隨機分佈,容易造成 B-tree 索引碎片化;而 UUID v7 按時間順序排列,新行往往被追加到索引末尾附近,從而提升插入效能。PostgreSQL 18 已內建 uuidv7() 函式,可見主流資料庫對其的支援正在擴大。
閒話 ― UUID v7 如何把「時間」帶回 UUID 家族
UUID v7 於 2024 年 5 月作為 IETF RFC 9562 標準化,這是自 2005 年最初的 RFC 4122 釋出約二十年以來 UUID 規範的首次重大修訂。此次修訂新增了可排序的 v6、v7 變體,以及支援自定義欄位的 v8,其背景正是 UUID v4 完全隨機的特性長期以來被指出不利於資料庫索引效率這一問題。
UUID v7 的設計與本站的姊妹工具 ULID 非常相似:兩者都將毫秒級時間戳置於前部,其餘部分以隨機值填充。決定性的區別在於表示形式——ULID 採用獨立於 UUID 標準之外的 26 位字元 Crockford Base32 格式,而 UUID v7 則延續了自 RFC 4122 以來的 36 位字元十六進位制表示。正因如此,UUID v7 能夠直接沿用既有的 UUID 型別列、庫以及 API 規範而無需任何改動。
事實上,UUID v7 釋出後不久便迅速獲得主流資料庫與語言執行時的支援。PostgreSQL 自 18 版本起內建了 uuidv7() 函式,其他主流語言與 ORM 中支援 v7 生成的庫也在快速增加。「可按時間順序排序」的便利性與「不破壞既有 UUID 資產」的相容效能夠兼得,正是 UUID v7 與 ULID 一同被迅速採納的原因。