Das einfügen und auswählen von UUIDs als binary(16)

Ich verstehe nicht, warum

SELECT UUID();

Gibt so etwas wie:

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

Aber wenn ich stecken Sie es in eine binary(16) - Feld (die UUID () - Funktion), die beispielsweise mit einem BEFORE-INSERT-trigger, und führen Sie eine auswählen, es gibt so etwas wie:

0782ef48-a439-11

Beachten Sie, dass diese beiden UUIDs sind nicht die gleichen Daten.

Merke ich, binäre und eine UUID-Zeichenfolge nicht identisch Aussehen, aber sollte nicht die ausgewählten Daten mindestens genauso lange? Wie sonst kann es vielleicht sein, ebenso wahrscheinlich, einzigartig zu sein?

Ist es besser, um es zu speichern als char(36)? Ich brauche nur einzigartig zu sein, um zu verhindern, dass doppelte Einsätze. Es ist nie ausgewählt oder verwendet für joins.

EDIT:

before-trigger werden würde wie:

BEGIN

if NEW.UUID IS NULL THEN

NEW.UUID = UUID();

END IF

END
  • Zeigen, wie Sie tun, die INSERT.
  • BINARY(16) können nur 16 Zeichen. So enthalten die ersten 16 Zeichen der UUID, die Sie speichern in ihm.
  • Nach stackoverflow.com/questions/10950202/... das ist nicht der Fall. Auch stackoverflow.com/questions/17726682/...
  • Diese Antwort nutzt UNHEX() zu konvertieren, die UUID zu einer Nummer, die passen in 16 bytes.
  • Egal wie Sie es drehen, wäre das nicht, reduzieren Sie die Komplexität um rund 50% dann? Das hat mich sehr verwirrt.
  • Ich verstehe nicht die Frage. Komplexität, was?
  • Likelyness, dass die UUID ist einzigartig.
  • dev.mysql.com/doc/refman/5.0/en/... erklärt, wie es sorgt, es ist einzigartig.
  • Okay, wir reden völlig aneinander vorbei. Ich weiß, dass die erste UUID ist mehr oder weniger garantiert, einzigartig zu sein,aber wenn Sie Schnitt 50% der Daten, die es wohl nicht mehr. Also warum tun Menschen hex oder unhex eine UUID und eine Reduzierung der Länge von 50%? Das macht für mich keinen Sinn.
  • Warum sind Sie Weg schneiden 50% der Daten? Wenn Sie UNHEX() alle 2-Zeichen wird ein byte des Ergebnisses, so wird es dann fit in BINARY(16).
  • Es gibt etwas, was ich einfach nicht verstehen, überhaupt über die hex, dann. Tut mir Leid.
  • Hex-Ziffern 0 durch F sind die zahlen 0 durch 15 im Dezimalsystem. Jede hex-Ziffer entspricht 4 bits, also 2 hex-Ziffern 8 bit, also 1 byte.
  • So richtig speichern Sie die UUID sollte ich entweder: A. Hex es zu verdichten, um 16 bytes, oder B. Speichern Sie es als char(36) statt?
  • Ja, das ist richtig.
  • Danke. Ich werde in diesem Blick dann.

InformationsquelleAutor nickdnk | 2015-01-31
Schreibe einen Kommentar