2017-04-19 1 views
1

Je souhaite laisser la colonne de base de données générer automatiquement environ 300 ++ chaîne alphanumérique aléatoire chaque fois que j'insère une nouvelle entrée dans la base de données. Le code ci-dessous seulement capable de la taille de 36.Énorme chaîne alphanumérique aléatoire de 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 
;; 

Merci à tous ceux qui répondent à cette question.

+0

Quel est le but de cette chaîne? Il y a des techniques [comme ceci] (http://stackoverflow.com/questions/16737910/generating-a-random-unique-8-character-string-using-mysql) pour générer des séquences alphanumériques, mais si vous avez besoin de quelque chose cryptographiquement unique et Unguessable, 'RAND()' est trop prévisible pour cela. – tadman

+0

Salut. @tadman Merci pour votre réponse. Le but de cette chaîne est comme une sorte d'authentification. L'esprit suggère une meilleure méthode pour moi d'appliquer sur lequel est crytographically unique? –

+0

Les valeurs de type UUID sont uniquement destinées à être uniques et non imprévisibles. Pour quelque chose cryptographiquement unique, vous aurez besoin d'un générateur de nombres aléatoires sécurisé, puis l'encoder en base 62 ou quelque chose de ce genre. Ce n'est peut-être pas la meilleure chose à faire pour MySQL, mais vous pouvez essayer. C'est beaucoup plus facile à faire dans un langage de programmation externe. – tadman

Répondre

1

Une option serait de chaîner juste ensemble la sortie de plusieurs appels à uuid(), à savoir

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 
;; 

Notez ici que je supprimer le trait d'union des UUID parce qu'ils sont superflus et ne font pas beaucoup de la manière de rendre les cordes plus aléatoires.

+0

Salut. @TimBiegeleisen Merci pour votre réponse. Cela fonctionne comme je le souhaite. –