Mysql : création d'un guid

Soyez le premier à donner votre avis sur cette source.

Snippet vu 15 366 fois - Téléchargée 21 fois

Contenu du snippet

Ceux qui fonctionnent avec des technologies Microsoft savent ce qu'est un Guid. C'est un code unique (hexadécimal, sur 32 caractères) qui peut servir d'identifiant dans une table (comme un champ auto_increment).

Voici un exemple de fonction pour créer un Guid.

Source / Exemple :


DROP FUNCTION IF EXISTS `CreateGUID`;
DELIMITER ;;
CREATE FUNCTION `CreateGUID`() RETURNS VARCHAR(32)
NOT DETERMINISTIC READS SQL DATA
BEGIN
DECLARE i TINYINT(1) DEFAULT 1;
DECLARE strValid VARCHAR(16) DEFAULT '0123456789ABCDEF';
DECLARE guid VARCHAR(32) DEFAULT '';
DECLARE pos TINYINT(2);
REPEAT
SELECT FLOOR(1 + RAND() * (LENGTH(strValid) - 1)) INTO pos;
SELECT CONCAT(guid, SUBSTR(strValid, pos, 1)) INTO guid;
SELECT i + 1 INTO i;
UNTIL i > 32 END REPEAT;
RETURN guid;
END;;
DELIMITER ;

Conclusion :


Peut être utile pour les projets fonctionnant en .NET/MySql.

A voir également

Ajouter un commentaire

Commentaires

FENETRES
Messages postés
205
Date d'inscription
jeudi 15 juillet 2004
Statut
Membre
Dernière intervention
14 avril 2009
-
Afin d'assurer une forte probabilité d'unicité, il me semble qu'un GUID est calculé d'après l'adresse MAC. Ce qui n'est visiblement pas le cas avec cette source !
maitredede
Messages postés
153
Date d'inscription
vendredi 9 août 2002
Statut
Membre
Dernière intervention
18 septembre 2009
-
Il y a effectivement plusieurs algo de calcul de Guid. Certains sont fait à partir d'une adresse MAC, d'autres à partir de la date/heure...
La probabilité de conflits sur une génération aléatoire reste faible.
D'autant plus que, sans modules complémentaires, il n'est pas possible de récupérer une adresse MAC depuis mysql...

Après, tu peux coder un module qui fait appel à l'OS pour générer des Guid...
yopai_v
Messages postés
48
Date d'inscription
jeudi 7 septembre 2006
Statut
Membre
Dernière intervention
21 avril 2010
-
2 petits avertissements pour les néophytes en .NET/Mysql qui tomberaient sur cette source.

L'ambiguïté potentielle (pour quelqu'un qui lirait un peu vite sans chercher à comprendre, ce qui n'est pas une bonne chose) de la phrase "un GUID est un code unique, qui peut servir d'identifiant dans une table (comme un champ auto_increment)." : cela ne veut pas dire que l'on peut stocker un GUID dans un champ auto_increment. Soit on utilise un champ INT auto_increment, soit un "bête" champ VARCHAR(32) dans lequel on va stocker explicitement les GUID que l'on génère.

Sur le plan théorique, j'ai une réserve à l'encontre de cette source : il me semble plus judicieux de faire générer le GUID par l'applicatif que par la base de données. D'une part parce que les routines existent déjà, censées fournir un meilleur GUID qu'un simple random; d'autre part parce que c'est l'applicatif qui "sait" ce qu'est un GUID. Et il est toujours mieux, si vous voulez construire une application robuste et lisible, de concentrer la gestion d'un objet dans la partie du système qui "sait" ce qu'est l'objet.

Il ne s'agit bien sûr que d'une réserve théorique, et il se peut que cette source trouve son utilisation justifiée dans un contexte donné. Mais un avertissement me semblait nécessaire pour éviter qu'un débutant en .NET/Mysql ne tombe sur cette source et utilise cette solution pour générer un GUID là où un appel .NET aurait suffi et aurait été préférable (appel qu'il serait intéressant d'expliciter ici, si quelqu'un connaît la fonction à appeler).
Xantra
Messages postés
56
Date d'inscription
jeudi 24 août 2006
Statut
Membre
Dernière intervention
2 septembre 2011
-
Très intéressant, mais j'arrive pas a le faire marcher :
Copier collé dans l'exécution SQL de phpmyadmin et erreur sur la 2eme ligne, et c'est pas la seul.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.