我正在使用 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(节点和时间戳),这将提供节点的排序顺序,然后是时间戳。