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?
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()
.
Oracle
SYS_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.
à 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;
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/