2010-12-01 38 views
0

Je suis sûr que cela s'appelle quelque chose dont je ne connais pas le nom.générer des ID mysql comme une chaîne au lieu d'un entier

Je veux générer ids comme:

59AA307E-94C8-47D1-AA50-AAA7500F5B54 

au lieu de la norme numéro incrémentée automatique.

Cela ne doit pas forcément être exactement comme cela, mais une longue valeur de chaîne unique est requise.

Y at-il un moyen facile de faire cela?

Je veux le faire pour référencer les pièces jointes ne sont donc pas facilement utilisés, comme attachment = 1

Je sais qu'il ya des façons de contourner cela, mais je figure l'identifiant basé chaîne serait mieux si possible, et im Bien sûr, je ne cherche pas la bonne chose.

Merci

Répondre

3

La dernière fois que j'ai vérifié, vous ne pouvez pas spécifier UUID() comme la contrainte par défaut pour une colonne MySQL. Cela signifie que l'aide d'un déclencheur:

CREATE TRIGGER 
newid 
BEFORE INSERT ON your_table_name 
FOR EACH ROW 
SET NEW.id = UUID() 

Je sais qu'il ya des façons de contourner, mais je figure l'identifiant basé chaîne serait mieux

Je comprends que vous êtes après la sécurité par obscurité, mais sachez que les colonnes CHAR/VARCHAR de plus de 4 caractères occupent plus d'espace que INT (1 octet). Cela aura un impact sur les performances dans la récupération et les JOINs.

+0

Pas que je l'ai dit dans la question, mais je le fais dans les rails, et il y a un plugin pour les rails, merci pour votre réponse. Si je pouvais choisir deux réponses, je choisirais la vôtre aussi. jcomeau_ictx vous a battu avec la réponse d'1 minute. –

0

Vous pouvez toujours simplement passer les valeurs auto_increment régulières via SHA1() ou MD5() quand il est temps de l'envoyer au "public". Avec une chaîne de salage décent avant/après la valeur d'ID, il serait pratiquement impossible de deviner quel était le nombre d'origine. Vous n'obtiendrez pas une chaîne ressemblant à un UUID, mais vous aurez toujours une valeur d'identifiant d'entier normale à gérer en interne.

Si vous vous inquiétez du temps CPU supplémentaire impliqué dans le hachage répété de la colonne, vous pouvez toujours stocker la valeur de hachage dans un champ séparé lorsque l'enregistrement est créé.