在 MySQL 中若需產生指定長度的隨機字串,可建立一個自訂函數 rand_string。以下是完整的建立腳本,包含必要的權限設定與刪除舊函數的邏輯:
SET GLOBAL log_bin_trust_function_creators = 1;
DROP FUNCTION IF EXISTS rand_string;
DELIMITER $$
CREATE FUNCTION rand_string(n INT)
RETURNS VARCHAR(255)
BEGIN
DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str VARCHAR(255) DEFAULT '';
DECLARE i INT DEFAULT 0;
WHILE i < n DO
SET return_str = CONCAT(return_str, SUBSTRING(chars_str, FLOOR(1 + RAND() * 62), 1));
SET i = i + 1;
END WHILE;
RETURN return_str;
END $$
DELIMITER ;
RAND() 產生 0~1 亂數,乘以 62 後取整數,對應字元池索引。n 重複拼接,最終回傳結果。函數建立完成後會綁定於當前資料庫,可用以下指令查看狀態:
SHOW FUNCTION STATUS WHERE Db = 'your_database_name';
測試呼叫範例:SELECT rand_string(10); 將回傳 10 碼隨機字串,如 aB3fG9kL2p。
注意:若在主從複制環境,需確保 log_bin_trust_function_creators 於主從均啟用,否則複制可能失敗。