乐闻世界logo
搜索文章和话题

How to format uuid string from binary column in MySQL/MariaDB

4 个月前提问
4 个月前修改
浏览次数29

1个答案

1

在MySQL或MariaDB中,UUID通常存储为二进制列以节省空间并提高效率。通常,UUID会被存储为一个16字节的二进制列(BINARY(16) 或 VARBINARY(16)),而不是作为一个36字符的字符串(包括4个短划线)。这样可以节省空间并优化索引效率。但是,在需要展示或处理这些UUID时,我们可能希望将其格式化为标准的36字符字符串形式。

格式化二进制 UUID

为了将二进制格式的UUID转换为可读的字符串格式,我们可以使用SQL内置函数,具体取决于你的数据库版本和配置。以下是在MySQL或MariaDB中常见的几种方法:

1. 使用BIN_TO_UUID()

MySQL 8.0+ 和 MariaDB 10.4+ 提供了 BIN_TO_UUID() 函数,可以直接将二进制格式的UUID转换为字符串格式。

示例:

sql
SELECT BIN_TO_UUID(binary_uuid_column) AS formatted_uuid FROM your_table;

这将把binary_uuid_column中的二进制UUID转换为标准的UUID字符串格式。

2. 使用HEX() 和字符串函数

对于老版本的数据库或更复杂的格式需求,可以使用HEX()函数将二进制数据转换为十六进制字符串,然后通过字符串函数进行格式化。

示例:

sql
SELECT CONCAT( SUBSTR(HEX(binary_uuid_column), 1, 8), '-', SUBSTR(HEX(binary_uuid_column), 9, 4), '-', SUBSTR(HEX(binary_uuid_column), 13, 4), '-', SUBSTR(HEX(binary_uuid_column), 17, 4), '-', SUBSTR(HEX(binary_uuid_column), 21) ) AS formatted_uuid FROM your_table;

这个方法通过先将二进制数据转换成一个长的十六进制字符串,然后通过SUBSTR()CONCAT()函数将其拆分并插入短横线来构建标准的UUID格式。

注意事项

  • 确保在将UUID数据插入数据库之前,选择合适的方法(如UUID_TO_BIN())来正确地转换和存储UUID。
  • 考虑到性能因素,如果需要频繁地在应用层面格式化UUID,可能更高效地在应用代码中处理而不是在数据库查询中处理。

通过上述方法,你可以根据具体的数据库版本和需求,选择合适的方式来格式化存储在二进制列中的UUID。

2024年7月25日 19:08 回复

你的答案