2017-04-19 40 views
1

私は、データベースに新しいエントリを挿入するたびに、約300 ++のランダムな英数字の文字列を自動生成するようにしたいと考えています。以下のコードは36のサイズしか使用できません。巨大なMySQLのランダムな英数字の文字列

DELIMITER ;; 
CREATE TRIGGER testdata 
BEFORE INSERT ON testdata 
FOR EACH ROW 
BEGIN 
    IF new.token IS NULL THEN 
    SET new.token = uuid(); 
    END IF; 
END 
;; 

ありがとうございました。

+0

この文字列の目的は何ですか?英数字のシーケンスを生成するにはテクニック[このような](http://stackoverflow.com/questions/16737910/generating-a-random-unique-8-character-string-using-mysql)がありますが、暗号的にユニークなものが必要な場合はRAND()はあまりにも予測可能です。 – tadman

+0

こんにちは。 @ tadmanあなたの返事をありがとう。この文字列の目的は、何らかの認証のようなものです。心は、私が叙述的にユニークなものを適用するためのより良い方法を提案しますか? –

+0

UUID型の値は、実際には予測できないユニークであることを意図しています。暗号的にユニークなものについては、安全な乱数ジェネレータが必要となり、それをbase-62などでエンコードする必要があります。これはMySQLが処理するのには最適ではないかもしれませんが、試してみることができます。外部プログラミング言語の方がはるかに簡単です。 – tadman

答えて

1

1つのオプションは、私は、彼らが不要であるためのUUIDからハイフンを削除し、道にあまりをしないことをここ

DELIMITER ;; 
CREATE TRIGGER testdata 
BEFORE INSERT ON testdata 
FOR EACH ROW 
BEGIN 
    IF new.token IS NULL THEN 
     SET new.token = CONCAT(REPLACE(uuid(), '-', ''), REPLACE(uuid(), '-', ''), ...) 
    END IF; 
END 
;; 

注すなわち、一緒に連鎖さuuid()への複数の呼び出しの出力することですストリングをよりランダムにすること。

+0

こんにちは。 @TimBiegeleisenあなたの答えをありがとう。私の望むように働いています。 –

関連する問題