Mariadb

MariaDB UUID 數據類型未正確排序

  • August 11, 2022

我正在使用 MariaDB 10.8.3。我有一個帶有 UUID 類型的 PK 的表。我正在插入在應用程序端生成的有序 UUID。當我檢索按 UUID 列排序的表的數據時,它沒有按預期排序。例如:

SELECT id_label, date_add FROM mod_label ORDER BY id_label ASC;

檢索到的數據是這樣的:

在此處輸入圖像描述

但是,如果我將 UUID 轉換為 char 或轉換為十六進制,則結果按預期排序:

SELECT id_label, date_add FROM mod_label ORDER BY CAST(id_label AS CHAR(36)) ASC;
SELECT id_label, date_add FROM mod_label ORDER BY HEX(id_label) ASC;

在此處輸入圖像描述

據我了解,MariaDB 將 UUID 保存為 128 位整數,所以我不理解這種行為。

有人可以向我解釋這種行為以及如何解決它嗎?

因為 MariaDB UUID 以索引友好的方式儲存,所以順序(每個程式碼)是:

UUID 值,llllllll-mmmm-Vhhh-vsss-nnnnnnnnnnnn

儲存為,nnnnnnnnnnnn-vsss-Vhhh-mmmm-llllllll

如果使用 UUIDv1(節點和時間戳),這將提供節點的排序順序,然後是時間戳。

引用自:https://dba.stackexchange.com/questions/315494