So formatieren Sie den uuid-string aus dem binary-Spalte in MySQL/MariaDB
In MySQL/MariaDB der effizienteste Weg, um store-uuid ist in einem BINARY(16) - Spalte. Aber manchmal, Sie wollen, um es zu erhalten, wie Sie eine formatierte uuid-Zeichenfolge.
Die folgende Tabelle Struktur, wie sollte ich es erhalten alle uuids in einem Standard formatiert?
CREATE TABLE foo (uuid BINARY(16));
- Siehe meine uuid blog
Du musst angemeldet sein, um einen Kommentar abzugeben.
Folgende schaffen würde, das Ergebnis war ich nach:
MySQL-8 fügt zwei neue UUID-Funktionen:
Also:
In früheren (vor 8) Versionen können Sie erstellen, Funktion in MySQL wie folgt:
Dann verwenden Sie einfach es in Ihre Abfragen:
Erzeugt:
2e9660c2-1e51-4b9e-9a86-6db1a2770422
wird gezeigt, wiec260962e-511e-9e4b-9a86-6db1a2770422
bei der Abfrage in MySQL-WorkbenchSELECT hex(uuid_column) FROM ${table}
und dannSELECT uuid_of(uuid_column) FROM ${table}
?hex(myId)
unduuid_of(uuid_column)
sind eigentlich die gleichenC260962E511E9E4B9A866DB1A2770422
undc260962e-511e-9e4b-9a86-6db1a2770422
aber es ist nicht die ID (glaube ich) mein MVC-Anwendung ist die Generierung und Speicherung in die Datenbank. Es erzeugt2E9660C2-1E51-4B9E-9A86-6DB1A2770422
was wird gespeichert, wieC260962E511E9E4B9A866DB1A2770422
. Kann es ein Problem mit der MySQL-EF-Adapter, die ich verwende, denn wenn ich die Abfrage nichts mit der UUID ausuuid_of
ich einfach nicht alles bekommen, aber wenn ich die eine aus der Funktion, die ich oben gepostet, ich bekomme meine Aufzeichnungen.Wenn Sie sich für das Gegenteil, D. H., wie die Konvertierung von string in Binär -, vielleicht, um zu tun, einen join-oder etwas, das hier behandelt werden : Konvertieren UUID nach/von Binär in Knoten
Diesem Stück von SQL laufen auf Mysql 5.7 half lock-in-Konzept für mich:
Die Ausgabe ist
43d597d7-2323-325a-90fc-21fa5947b9f3
.string -> binäre
So
UNHEX(REPLACE('43d597d7-2323-325a-90fc-21fa5947b9f3', '-', ''))
zur Konvertierung einer UUID auf binäre während eineINSERT
/UPDATE
/JOIN
/SELECT
was auch immer, undbinary -> string
Hier ist eine alternative mit concat_ws
Speichern von raw-uuid in eine variable @x
Verwenden CONCAT_WS und SUBSTR analysieren, lesbare UUID
Das richtige Ergebnis generiert das Skript unten, das andere Scripte generiert einen UUID-jedoch nicht die richtige.
Ergebnisse, die mit anderen Skripten erzeugt falsche UUID wie nachstehend erklärt:
2e9660c2-1e51-4b9e-9a86-6db1a2770422
c260962e-511e-9e4b-9a86-6db1a2770422
Wie Sie sehen können, Sie sind anders.