L'insertion et la sélection des Uuid comme binaire(16)

Je ne comprends pas pourquoi

SELECT UUID();

Retourne quelque chose comme:

3f06af63-a93c-11e4-9797-00505690773f

Mais si je l'insère dans un fichier binaire(16) domaine (l'UUID ()), avec par exemple un AVANT déclencheur d'INSERTION et d'exécuter un select, il renvoie à quelque chose comme:

0782ef48-a439-11

Noter que ces deux Uuid ne sont pas les mêmes données.

Je me rends compte binaire et un UUID de la chaîne n'a pas l'air identiques, mais ne devrait pas les données sélectionnées au moins aussi longtemps? Sinon, comment peut-il être tout aussi susceptibles d'être unique?

Est-il préférable de le stocker en tant que char(36)? J'ai juste besoin d'être unique pour éviter de dupliquer les inserts. Il n'est jamais sélectionné ou utilisé pour les jointures.

EDIT:

avant de déclencher serait comme:

BEGIN

if NEW.UUID IS NULL THEN

NEW.UUID = UUID();

END IF

END
Montrez comment vous êtes en train de faire la INSERT.
BINARY(16) ne peut contenir 16 caractères. Donc, il contiendra les 16 premiers caractères de l'UUID que vous stockez.
Selon stackoverflow.com/questions/10950202/... ce n'est pas le cas. Aussi stackoverflow.com/questions/17726682/...
La réponse s'utilise UNHEX() pour convertir les UUID pour un certain nombre qui s'adapte à 16 octets.
Peu importe comment vous la faire tourner, ne serait-ce pas réduire la complexité d'environ 50%, alors? Cela m'a très confus.

OriginalL'auteur nickdnk | 2015-01-31