首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 自訂隨機字串函式實作:MD5、UUID 與字元集三種方法

     編輯:MySQL 綜合教學

MySQL 自訂隨機字串函式實作:MD5、UUID 與字元集三種方法

MySQL 內建無直接產生隨機字串函式,本文提供三種自訂函式實作,從簡單到完整功能。

方法一:簡單粗暴(MD5 + RAND)

SELECT SUBSTRING(MD5(RAND()), FLOOR(RAND()*26)+1, 6) AS rand_str;
  • RAND():0~1 隨機小數
  • MD5():產生 32 字元十六進位字串
  • SUBSTRING(str, pos, len):擷取片段(位置從 1 起)
  • 缺點:僅含 0-9, a-f,長度固定,隨機性較弱

執行結果

方法二:封裝為自訂函式(可指定長度)

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 位元無符號整數,叢集唯一
  • 應用層產生(PHP random_bytes(), Java SecureRandom)更安全
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved