Stocker MySQL GUID / UUIDs

C'est la meilleure façon que j'ai pu trouver pour convertir un GUID/UUID MySQL généré par UUID() en binaire(16):

UNHEX(REPLACE(UUID(),'-',''))

Et puis les stocker dans un fichier BINAIRE(16)

y a-t-il des implications à ce que je sache?

30
demandé sur thr 2009-02-13 21:27:39

3 réponses

peu d'implications. Cela ralentira un peu les requêtes, mais vous le remarquerez à peine.

UNIQUEIDENTIFIER est stocké comme 16-byte binary interne en tout cas.

si vous allez charger le binaire dans un client et le parser là, notez le bit order, il peut y avoir une autre représentation de chaîne de caractères que leNEWID().

OracleSYS_GUID() la fonction est sujette à ce problème, la convertir en chaîne donne des résultats différents sur le client et sur le serveur.

8
répondu Quassnoi 2011-11-23 11:25:46

à Partir de MySQL 8.0 et au-dessus vous pouvez utiliser UUID_TO_BIN:

UUID_TO_BIN (string_uuid), UUID_TO_BIN (string_uuid, swap_flag)

Convertit une chaîne UUID en UUID binaire et renvoie le résultat. (La description de la fonction IS_UUID () liste les formats UUID de chaîne autorisés.) L'UUID binaire de retour est une valeur VARBINAIRE (16).

CREATE TABLE t (id binary(16) PRIMARY KEY);

INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));
INSERT INTO t VALUES(UUID_TO_BIN(UUID(), true));

SELECT *, BIN_TO_UUID(id) FROM t;

DB-Fiddle.com Démo

1
répondu Lukasz Szozda 2018-04-21 07:39:00

je le hacherais dans un entier de 8 octets et stockerais l'entier en utilisant un algorithme de hachage unidirectionnel à basse efficacité comme MurmurHash64A. Cela utilise beaucoup moins d'espace et peut être indexé et / ou partitionné sur. Il y a un projet SourceForge qui inclut des fonctions MemCached pour mySQL (http://forge.mysql.com/projects/project.php?id=250) qui pourrait inclure MurmurHash64A, puisque Memchached l'utilise, mais je ne sais pas. Ou regardez cette implémentation de FNV pour mySQL: http://www.xaprb.com/blog/2008/03/09/a-very-fast-fnv-hash-function-for-mysql/

-5
répondu bretlowery 2010-06-07 20:56:08