Mariadb
MariaDB UUID 數據類型未正確排序
我正在使用 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(節點和時間戳),這將提供節點的排序順序,然後是時間戳。