MySQL 內建無直接產生隨機字串函式,本文提供三種自訂函式實作,從簡單到完整功能。
SELECT SUBSTRING(MD5(RAND()), FLOOR(RAND()*26)+1, 6) AS rand_str;
RAND():0~1 隨機小數MD5():產生 32 字元十六進位字串SUBSTRING(str, pos, len):擷取片段(位置從 1 起)
DROP FUNCTION IF EXISTS rand_str;
CREATE FUNCTION rand_str(strlen SMALLINT) RETURNS VARCHAR(255)
BEGIN
DECLARE result_str VARCHAR(255) DEFAULT '';
SET result_str = SUBSTRING(MD5(RAND()), 32 - strlen, strlen);
RETURN result_str;
END;
使用:SELECT rand_str(10);
DROP FUNCTION IF EXISTS rand_str;
CREATE FUNCTION rand_str(strlen SMALLINT) RETURNS VARCHAR(255)
BEGIN
DECLARE randStr VARCHAR(255) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890';
DECLARE i SMALLINT DEFAULT 0;
DECLARE resultStr VARCHAR(255) DEFAULT '';
WHILE i < strlen DO
SET resultStr = CONCAT(SUBSTR(randStr, FLOOR(RAND() * LENGTH(randStr)) + 1, 1), resultStr);
SET i = i + 1;
END WHILE;
RETURN resultStr;
END;
| 方法 | 適用場景 | 隨機品質 | 效能 |
|---|---|---|---|
| MD5 簡易版 | 臨時測試、非安全需求 | 低(僅 16 進位) | 最高 |
| MD5 函式版 | 固定長度、單純唯一碼 | 中 | 高 |
| 字元集迴圈版 | 驗證碼、Token、測試資料產生 | 高(62 字元集) | 中(迴圈開銷) |
UUID():產生 36 字元 UUID(含連字號),全域唯一UUID_SHORT():64 位元無符號整數,叢集唯一random_bytes(), Java SecureRandom)更安全