You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MariaDB 10.1版本中生成UUID/GUID?

解决MariaDB 10.1中生成BINARY(16) GUID的替代方案

我明白你现在的困境:MariaDB 10.1没有MySQL的random_bytes(16)函数,但你需要给BINARY(16)列生成GUID(甚至设为默认值)。下面是几个经过验证的可行方案:

1. 利用内置UUID()转换为BINARY(16)

MariaDB自带的UUID()函数能生成标准字符串格式的UUID(例如550e8400-e29b-41d4-a716-446655440000),我们可以通过去掉分隔符再转二进制的方式,得到适合BINARY(16)列的值:

-- 生成适配BINARY(16)的GUID
SELECT UNHEX(REPLACE(UUID(), '-', '')) AS binary_guid;

要是想把这个设为列的默认值,注意MariaDB 10.1不允许直接将函数作为BINARY列的默认值,这时候可以用触发器来实现插入时自动赋值:

-- 创建触发器,插入时自动填充BINARY(16)列(仅当值为NULL时)
DELIMITER //
CREATE TRIGGER before_insert_your_table
BEFORE INSERT ON your_table_name
FOR EACH ROW
BEGIN
    IF NEW.your_binary_column IS NULL THEN
        SET NEW.your_binary_column = UNHEX(REPLACE(UUID(), '-', ''));
    END IF;
END //
DELIMITER ;

2. 自定义类似random_bytes(16)的函数

如果你更偏好直接生成纯随机的16字节二进制数据,而不是标准UUID结构,可以自己写一个自定义函数:

DELIMITER //
CREATE FUNCTION custom_random_bytes(length INT) RETURNS BINARY(255)
DETERMINISTIC
BEGIN
    DECLARE result BINARY(255) DEFAULT '';
    DECLARE i INT DEFAULT 0;
    WHILE i < length DO
        SET result = CONCAT(result, CHAR(FLOOR(RAND() * 256)));
        SET i = i + 1;
    END WHILE;
    RETURN result;
END //
DELIMITER ;

调用它生成16字节二进制值的方式很简单:

SELECT custom_random_bytes(16) AS binary_guid;

同样,要设为默认值的话,把触发器里的赋值语句换成SET NEW.your_binary_column = custom_random_bytes(16);就行。

小提示

  • 用UUID()转换的方式生成的是符合标准UUID规范的二进制值(包含版本和变体信息),而自定义函数生成的是完全随机的16字节数据,你可以根据业务需求选择。
  • 触发器里的IS NULL判断很重要,这样手动指定列值时,不会被触发器覆盖。

内容的提问来源于stack exchange,提问作者Joe Phillips

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:51:30