mysql生成32位大写uuid
时间: 2025-01-23 20:55:27 浏览: 47
### 如何在 MySQL 中生成 32 位大写 UUID
为了在 MySQL 数据库中生成一个不含连字符的 32 位大写 UUID,可以采用多种方法。一种常见的方式是在 SQL 查询内部处理字符串转换。
#### 方法一:使用内置函数组合
通过结合 `UUID()` 和 `REPLACE` 函数移除分隔符,并利用 `UPPER` 函数将结果转为大写字母:
```sql
SELECT UPPER(REPLACE(UUID(), '-', ''));
```
这条命令会返回形如 `ECCC72479AD511E99835B8EE6591991D` 的字符串[^4]。
#### 方法二:创建自定义函数
如果希望频繁执行此操作,则建议创建一个新的数据库函数以便重复调用:
```sql
DELIMITER $$
CREATE FUNCTION generate_upper_uuid()
RETURNS CHAR(32)
DETERMINISTIC
BEGIN
RETURN UPPER(REPLACE(UUID(),'-',''));
END$$
DELIMITER ;
```
之后可以直接调用该函数获取所需格式的结果:
```sql
SELECT generate_upper_uuid();
```
这同样会产生一个去除了连接符并全部字母都为大写的 UUID 值[^3]。
相关问题
mysql存储uuid
### 如何在 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" 模式呈现出来.
mysql 获取uuid
### 如何在MySQL中生成UUID
在MySQL数据库环境中,`UUID()` 函数用于生成通用唯一标识符 (Universally Unique Identifier),这是一种128位的数值。此函数返回一个由连字符分隔的36个字符(包括大写字母A-F和数字0-9)组成的字符串[^1]。
为了向表中添加UUID列并填充数据,可以按照如下方式操作:
#### 添加新列接收UUIDs
```sql
ALTER TABLE your_table_name ADD COLUMN uuid_column CHAR(36);
```
#### 更新现有记录设置UUID值
```sql
UPDATE your_table_name SET uuid_column = UUID();
```
对于自动为每一行生成唯一的UUID,在创建表时可以直接定义默认值为 `UUID()` 的字段,这样每次插入新纪录时都会自动生成一个新的UUID[^3]:
```sql
CREATE TABLE example (
id INT NOT NULL AUTO_INCREMENT,
data VARCHAR(255),
guid CHAR(36) DEFAULT(UUID()),
PRIMARY KEY(id)
);
```
需要注意的是,尽管概率极低,但在理论上存在两个不同的调用可能产生相同的UUID的情况;然而,当这种情况发生在作为主键使用的UUID上时,MySQL不会尝试重新生成新的UUID来解决冲突——而是会抛出错误提示违反了唯一约束条件[^2]。
阅读全文
相关推荐

















