mysql存储uuid
时间: 2025-02-09 19:55:58 浏览: 46
### 如何在 MySQL 中正确存储 UUID 数据类型的最佳实践
#### 使用 BINARY(16) 类型存储 UUID
为了高效地存储 UUID,在 MySQL 中推荐使用 `BINARY(16)` 类型而不是传统的 `VARCHAR(36)`。这样做不仅减少了所需的存储空间,还提高了索引性能[^3]。
```sql
CREATE TABLE example (
id BINARY(16) NOT NULL,
name VARCHAR(255),
PRIMARY KEY (id)
);
```
#### 插入 UUID 值
当向表中插入新记录时,可以通过将字符串形式的 UUID 转换为二进制格式来保存:
```sql
INSERT INTO example (id, name)
VALUES (UNHEX(REPLACE(UUID(), '-', '')), 'Test Name');
```
这段 SQL 语句首先调用 `UUID()` 函数生成一个新的 UUID 字符串,接着移除其中的连字符 `-` 并将其转换成十六进制表示法以便能够存入 `BINARY(16)` 列中。
#### 查询并显示 UUID
如果需要查询带有 UUID 的记录并将它们以标准格式展示给用户,则可以在 SELECT 语句中执行相反的操作—即将二进制数据重新编码回原始的字符串格式:
```sql
SELECT HEX(id), name FROM example;
```
这将会把 `BINARY(16)` 形式的 ID 显示为大写的十六进制字符串,方便阅读和调试.
#### 创建虚拟列用于文本形式的 UUID
对于那些既希望保持高效的内部存储又想要提供易于理解的人类友好版本的应用程序而言,可以利用 MySQL 5.7 及以上版本支持的虚拟列功能。这样做的好处是不会额外增加实际磁盘上的开销,因为虚拟列并不真正占用物理空间:
```sql
ALTER TABLE example ADD COLUMN uuid_str AS (LOWER(CONCAT(
SUBSTR(HEX(id), 1, 8), '-',
SUBSTR(HEX(id), 9, 4), '-',
SUBSTR(HEX(id), 13, 4), '-',
SUBSTR(HEX(id), 17, 4), '-',
SUBSTR(HEX(id), 21)))) STORED;
```
上述命令会在现有表格上添加一个名为 `uuid_str` 的自动生成字段,它总是与对应的 `id` 同步更新,并按照常见的 "xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx" 模式呈现出来.
阅读全文
相关推荐


















