MySQLでランダムな英数字列を生成\u3000\u2014\u2014 サンプルコード3選\u3000\u2014 応用例と注意事項も解説
MySQL を使用してランダムかつ一意の 8 文字の英数字列を生成する方法
このチュートリアルでは、MySQLを使用してランダムかつ一意の 8 文字の英数字列を生成する方法を説明します。この方法は、パスワードやトークンなどのランダムな値を生成する必要がある場合に役立ちます。
方法
以下の手順を実行して、ランダムかつ一意の 8 文字の英数字列を生成します。
- 必要なライブラリをインポートする
SELECT
SUBSTRING(
CONCAT(
UUID(),
RAND()
),
11,
8
) AS random_string
FROM
dual;
- UUID と RAND() 関数を使用する
上記のクエリでは、以下の操作を実行します。
UUID()
関数は、128 ビットのランダムな値を生成します。RAND()
関数は、0 から 1 の間のランダムな浮動小数点数を生成します。CONCAT()
関数は、2 つの文字列を連結します。SUBSTRING()
関数は、文字列の一部を抽出します。
このクエリをを実行すると、8 文字のランダムな英数字列が生成されます。
例
SELECT
SUBSTRING(
CONCAT(
UUID(),
RAND()
),
11,
8
) AS random_string
FROM
dual;
このクエリを実行すると、次のような出力が得られます。
random_string
---------
n7YoTeTq
説明
- 生成される文字列は、大文字と小文字、数字が混在したランダムな英数字列になります。
- 生成される文字列は常に一意になります。これは、UUID() 関数が常に一意な値を生成し、SUBSTRING() 関数が重複を排除するためです。
- 文字列の長さは常に 8 文字になります。これは、SUBSTRING() 関数の第二引数が 8 に設定されているためです。
応用例
この方法は、次のような場合に使用できます。
- パスワードを生成する
- トークンを生成する
- ランダムな ID を生成する
注意事項
- この方法は、安全性の高いパスワードを生成するためには十分ではありません。パスワードを生成するには、より強力な方法を使用する必要があります。
- 生成される文字列は、URL やファイル名などの特定の形式に適していない場合があります。そのような場合は、生成された文字列をさらに処理する必要があります。
SELECT
SUBSTRING(
CONCAT(
UUID(),
RAND()
),
11,
8
) AS random_string
FROM
dual;
- このクエリは、
UUID()
関数とRAND()
関数を使用して、128 ビットのランダムな値と 0 から 1 の間のランダムな浮動小数点数を生成します。 - 生成された値は
CONCAT()
関数を使用して連結され、11 文字目から 8 文字目までの部分文字列がSUBSTRING()
関数を使用して抽出されます。 - 抽出された部分文字列は、ランダムかつ一意の 8 文字の英数字列になります。
実行方法
このクエリを実行するには、MySQL クライアントを使用する必要があります。以下に、MySQL クライアントを使用してクエリを実行する方法の例を示します。
- MySQL クライアントを開きます。
- 以下のクエリを入力して実行します。
SELECT
SUBSTRING(
CONCAT(
UUID(),
RAND()
),
11,
8
) AS random_string
FROM
dual;
- Enter キーを押します。
出力
random_string
---------
n7YoTeTq
MySQLでランダムな英数字列を生成するその他の方法
CHAR() と FLOOR() 関数を使用する
この方法は、CHAR()
関数と FLOOR()
関数を使用して、ランダムな英数字文字を生成します。
SELECT
SUBSTRING(
CHAR(
FLOOR(RAND() * 36) + 55
),
1,
8
) AS random_string
FROM
dual;
- このクエリは、以下の操作を実行します。
FLOOR()
関数は、小数部分を切り捨てて、生成された浮動小数点数を整数に変換します。36
は、英数字の合計数 (10 個の数字 + 26 個の小文字 + 26 個の大文字) です。55
は、小文字の ASCII コードの開始値です。CHAR()
関数は、生成された整数を英数字文字に変換します。
SELECT
LEFT(
CONV(
FLOOR(RAND() * 16777216) + 1,
10,
36
),
8
) AS random_string
FROM
dual;
- このクエリは、以下の操作を実行します。
16777216
は、16 進数の最大値です。CONV()
関数は、数値を別の基数に変換します。- 第一引数は変換する数値です。
- 第二引数は元の基数です。
INSERT INTO random_strings (random_string)
SELECT
SUBSTRING(
CONCAT(
UUID(),
RAND()
),
11,
8
)
FROM
dual
LIMIT 1;
- このクエリは、以下の操作を実行します。
random_strings
テーブルに新しい行を挿入します。random_string
列に、ランダムな 8 文字の英数字列を挿入します。LIMIT 1
句は、1 行のみ挿入することを指定します。
- 文字列の長
mysql sql