Mysql
 sql >> Database >  >> RDS >> Mysql

Generazione di una stringa di 8 caratteri casuale e univoca utilizzando MySQL

Non mi preoccuperei della probabilità di collisione. Basta generare una stringa casuale e verificare se esiste. In tal caso, riprova e non dovresti aver bisogno di farlo più di un paio di volte a meno che tu non abbia già assegnato un numero enorme di targhe.

Un'altra soluzione per generare una stringa pseudocasuale lunga 8 caratteri in puro (My)SQL:

SELECT LEFT(UUID(), 8);

Puoi provare quanto segue (pseudo-codice):

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

Poiché questo post ha ricevuto un livello di attenzione inaspettato, consentitemi di evidenziare Commento di ADTC :il codice sopra è piuttosto stupido e produce cifre sequenziali.

Per una casualità leggermente meno stupida, prova invece qualcosa del genere:

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

E per una vera casualità (crittograficamente sicura), usa RANDOM_BYTES() anziché RAND() (ma poi prenderei in considerazione di spostare questa logica fino al livello dell'applicazione).