Mysql : création d'un guid

Soyez le premier à donner votre avis sur cette source.

Snippet vu 16 374 fois - Téléchargée 23 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
Xantra Messages postés 56 Date d'inscription jeudi 24 août 2006 Statut Membre Dernière intervention 2 septembre 2011
23 juin 2009 à 02:59
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.
yopai_v Messages postés 47 Date d'inscription jeudi 7 septembre 2006 Statut Membre Dernière intervention 21 avril 2010
30 nov. 2008 à 08:51
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).
maitredede Messages postés 153 Date d'inscription vendredi 9 août 2002 Statut Membre Dernière intervention 18 septembre 2009
8 janv. 2008 à 11:19
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...
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
7 janv. 2008 à 12:27
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 !

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.