9

次を使用して、MySQLで36文字のランダムな文字列を生成しようとしています。

UPDATE my_table SET entity_uid = substring(MD5(RAND()) FROM 1 FOR 36);

ただし、結果は常に32文字の文字列になります。より長い文字列を取得する方法はありますか?

4

4 に答える 4

12

1つのオプションは、2つのMD5ハッシュを生成し、それらを連結して(合計64の16進文字)、その最初の36文字を取得することです。

SELECT SUBSTR(CONCAT(MD5(RAND()),MD5(RAND())),1,36)

(注:MD5ハッシュは128ビットです。MySQLMD5()関数は32桁の16進文字を返します。)

于 2013-01-21T18:30:05.870 に答える
10

5.7.4以降のバージョンでMySQLを使用する場合は、新しく追加されたRANDOM_BYTES関数を使用できます。

 SELECT TO_BASE64(RANDOM_BYTES(40));

これにより、などのランダムな文字列が生成されr633j3sfgE85f3Jz+3AEx6Xo6qPXPUZruNimhId18iy+J1qOgZyCgg==ます。

于 2016-04-18T08:45:24.813 に答える
2

MD5ハッシュを32文字の16進数として返します。

MySQLによると

文字列のMD5128ビットチェックサムを計算します。値は32桁の16進数の文字列として返され、引数がNULLの場合はNULLが返されます。戻り値は、たとえば、ハッシュキーとして使用できます。ハッシュ値を効率的に保存する方法については、このセクションの冒頭にある注記を参照してください。

于 2013-01-21T18:26:49.347 に答える
2
UPDATE my_table SET entity_uid = UUID();
于 2013-01-24T10:17:47.527 に答える