Lil*_*man 22 mysql uuid mariadb
在MySQL/MariaDB中,存储uuid的最有效方法是在BINARY(16)列中.但是,有时您希望将其作为格式化的uuid字符串获取.
鉴于以下表结构,我将如何以默认格式化方式获取所有uuids?
CREATE TABLE foo (uuid BINARY(16));
Run Code Online (Sandbox Code Playgroud)
Lil*_*man 44
以下将创建我之后的结果:
SELECT
LOWER(CONCAT(
SUBSTR(HEX(uuid), 1, 8), '-',
SUBSTR(HEX(uuid), 9, 4), '-',
SUBSTR(HEX(uuid), 13, 4), '-',
SUBSTR(HEX(uuid), 17, 4), '-',
SUBSTR(HEX(uuid), 21)
))
FROM foo;
Run Code Online (Sandbox Code Playgroud)
Ole*_*eev 10
MySQL 8增加了两个新的UUID功能:
所以:
SELECT BIN_TO_UUID(uuid) FROM foo
Run Code Online (Sandbox Code Playgroud)
如果您正在寻找相反的内容,即如何从字符串转换为二进制,也许是为了进行连接或其他操作,请参见此处:Convert UUID to/from binary in Node
这段在 Mysql 5.7 上运行的 SQL 帮助我锁定了这个概念:
SELECT
LOWER(CONCAT(
SUBSTR(HEX(UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))), 1, 8), '-',
SUBSTR(HEX(UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))), 9, 4), '-',
SUBSTR(HEX(UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))), 13, 4), '-',
SUBSTR(HEX(UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))), 17, 4), '-',
SUBSTR(HEX(UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))), 21)
))
Run Code Online (Sandbox Code Playgroud)
输出是43d597d7-2323-325a-90fc-21fa5947b9f3。
字符串 -> 二进制
所以,UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))到时的UUID转换为二进制的INSERT/ UPDATE/ JOIN/SELECT什么的,
二进制 -> 字符串
LOWER(CONCAT(
SUBSTR(HEX(uuid), 1, 8), '-',
SUBSTR(HEX(uuid), 9, 4), '-',
SUBSTR(HEX(uuid), 13, 4), '-',
SUBSTR(HEX(uuid), 17, 4), '-',
SUBSTR(HEX(uuid), 21)
))
Run Code Online (Sandbox Code Playgroud)
在早期版本(8之前)中,您可以在MySQL中创建如下函数:
CREATE
FUNCTION uuid_of(uuid BINARY(16))
RETURNS VARCHAR(36)
RETURN LOWER(CONCAT(
SUBSTR(HEX(uuid), 1, 8), '-',
SUBSTR(HEX(uuid), 9, 4), '-',
SUBSTR(HEX(uuid), 13, 4), '-',
SUBSTR(HEX(uuid), 17, 4), '-',
SUBSTR(HEX(uuid), 21)
));
Run Code Online (Sandbox Code Playgroud)
然后只需在查询中使用它即可:
SELECT
uuid_of(id)
name,
age
FROM users
Run Code Online (Sandbox Code Playgroud)
它产生:
(c6f5703b-fec2-43fd-8f45-45f06583d450,某些名称,20)
| 归档时间: |
|
| 查看次数: |
20276 次 |
| 最近记录: |