sql >> Base de Datos >  >> RDS >> Mysql

Generando una cadena aleatoria y única de 8 caracteres usando MySQL

No me molestaría con la probabilidad de colisión. Simplemente genere una cadena aleatoria y verifique si existe. Si es así, inténtalo de nuevo y no deberías necesitar hacerlo más de un par de veces a menos que ya tengas una gran cantidad de placas asignadas.

Otra solución para generar una cadena pseudoaleatoria de 8 caracteres de longitud en (My)SQL puro:

SELECT LEFT(UUID(), 8);

Puedes probar lo siguiente (pseudocódigo):

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

Dado que esta publicación ha recibido un nivel de atención inesperado, permítanme destacar Comentario de ADTC :el fragmento de código anterior es bastante tonto y produce dígitos secuenciales.

Para una aleatoriedad un poco menos estúpida, prueba algo como esto:

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

Y para una verdadera aleatoriedad (criptográficamente segura), use RANDOM_BYTES() en lugar de RAND() (pero luego consideraría mover esta lógica a la capa de aplicación).