Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

สร้าง Random String 10 ตัวอักษรใน MySQL ด้วย RAND() และ CHAR()

สามารถสร้าง Random String ได้ด้วยฟังก์ชัน RAND() และ CHAR() ใน MySQL โดยตรง

Lowercase (a-z)

SELECT CONCAT(
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97),
    CHAR(ROUND(RAND()*25)+97)
) AS Random10CharacterString;

ผลลัพธ์ตัวอย่าง

+-------------------------+
| Random10CharacterString |
+-------------------------+
| duscikyspy              |
+-------------------------+

Uppercase (A-Z)

SELECT CONCAT(
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65),
    CHAR(ROUND(RAND()*25)+65)
) AS Random10CharacterString;

ผลลัพธ์ตัวอย่าง

+-------------------------+
| Random10CharacterString |
+-------------------------+
| WMWWVOIXPF              |
+-------------------------+

วิธีที่สะดวกกว่า: ใช้ SUBSTRING + MD5/RAND

-- ใช้ MD5 ของ RAND() แล้ว取 10 ตัวแรก
SELECT SUBSTRING(MD5(RAND()), 1, 10) AS random_str;
-- ผลลัพธ์: a1b2c3d4e5 (Hex: 0-9, a-f)

-- หรือ SHA2
SELECT SUBSTRING(SHA2(RAND(), 256), 1, 10);

วิธีที่ดีที่สุดสำหรับ Production: UUID()

-- UUID v1 (มี Timestamp + MAC)
SELECT UUID();
-- 550e8400-e29b-41d4-a716-446655440000

-- UUID_SHORT() - 64-bit Integer
SELECT UUID_SHORT();
-- 92395783831150593

สร้าง Function สำหรับใช้ซ้ำ

DELIMITER //
CREATE FUNCTION GenerateRandomString(length INT) 
RETURNS VARCHAR(255)
DETERMINISTIC
BEGIN
    DECLARE result VARCHAR(255) DEFAULT '';
    DECLARE i INT DEFAULT 0;
    WHILE i < length DO
        SET result = CONCAT(result, CHAR(ROUND(RAND()*25)+97));
        SET i = i + 1;
    END WHILE;
    RETURN result;
END //
DELIMITER ;

-- ใช้งาน
SELECT GenerateRandomString(10);

⚠️ ข้อควรระวัง

  • RAND() ไม่ Cryptographically Secure - ห้ามใช้สำหรับ Token/Password/Secret
  • สำหรับ Security Token ใช้ UUID() หรือ Application Layer (openssl_random_pseudo_bytes, random_bytes)
  • Function นี้ Non-deterministic - ไม่สามารถใช้ใน Generated Column / Partition ได้