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 一同被迅速採納的原因。