Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Generieren einer zufälligen und eindeutigen Zeichenfolge mit 8 Zeichen mit MySQL

Ich würde mich nicht um die Wahrscheinlichkeit einer Kollision kümmern. Generieren Sie einfach eine zufällige Zeichenfolge und prüfen Sie, ob sie existiert. Wenn dies der Fall ist, versuchen Sie es erneut und Sie sollten es nicht mehr als ein paar Mal tun müssen, es sei denn, Sie haben bereits eine große Anzahl von Platten zugewiesen.

Eine weitere Lösung zum Generieren eines 8 Zeichen langen Pseudozufallsstrings in reinem (My)SQL:

SELECT LEFT(UUID(), 8);

Sie können Folgendes versuchen (Pseudocode):

DO 
    SELECT LEFT(UUID(), 8) INTO @plate;
    INSERT INTO plates (@plate);
WHILE there_is_a_unique_constraint_violation
-- @plate is your newly assigned plate number

Da dieser Beitrag ein unerwartetes Maß an Aufmerksamkeit erhalten hat, möchte ich ADTCs Kommentar :Der obige Codeabschnitt ist ziemlich dumm und erzeugt aufeinanderfolgende Ziffern.

Für etwas weniger dumme Zufälligkeit versuchen Sie stattdessen etwas wie das:

SELECT LEFT(MD5(RAND()), 8)

Und für echte (kryptografisch sichere) Zufälligkeit verwenden Sie RANDOM_BYTES() statt RAND() (Aber dann würde ich erwägen, diese Logik auf die Anwendungsschicht zu verschieben).