Reputation: 19476
This is the best way I could come up with to convert a MySQL GUID/UUID generated by UUID() to a binary(16):
UNHEX(REPLACE(UUID(),'-',''))
And then storing it in a BINARY(16)
Are there any implications of doing it this way that I should know of?
Upvotes: 33
Views: 24435
Reputation: 176244
From MySQL 8.0 and above you could use UUID_TO_BIN:
UUID_TO_BIN(string_uuid), UUID_TO_BIN(string_uuid, swap_flag)
Converts a string UUID to a binary UUID and returns the result. (The IS_UUID() function description lists the permitted string UUID formats.) The return binary UUID is a VARBINARY(16) value.
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;
Upvotes: 9
Reputation: 425823
Not many implications. It will slow down the queries a little, but you will hardly notice it.
UNIQUEIDENTIFIER
is stored as 16-byte binary
internally anyway.
If you are going to load the binary into a client and parse it there, note the bit order
, it may have other string representation than the initial NEWID()
.
Oracle
's SYS_GUID()
function is prone to this issue, converting it to a string gives different results on client and on server.
Upvotes: 8