25 lines
745 B
SQL
25 lines
745 B
SQL
-- https://stackoverflow.com/a/61062917
|
|
|
|
CREATE FUNCTION uuid_v4()
|
|
RETURNS CHAR(36)
|
|
BEGIN
|
|
-- 1th and 2nd block are made of 6 random bytes
|
|
SET @h1 = HEX(RANDOM_BYTES(4));
|
|
SET @h2 = HEX(RANDOM_BYTES(2));
|
|
|
|
-- 3th block will start with a 4 indicating the version, remaining is random
|
|
SET @h3 = SUBSTR(HEX(RANDOM_BYTES(2)), 2, 3);
|
|
|
|
-- 4th block first nibble can only be 8, 9 A or B, remaining is random
|
|
SET @h4 = CONCAT(HEX(FLOOR(ASCII(RANDOM_BYTES(1)) / 64)+8),
|
|
SUBSTR(HEX(RANDOM_BYTES(2)), 2, 3));
|
|
|
|
-- 5th block is made of 6 random bytes
|
|
SET @h5 = HEX(RANDOM_BYTES(6));
|
|
|
|
-- Build the complete UUID
|
|
RETURN LOWER(CONCAT(
|
|
@h1, '-', @h2, '-4', @h3, '-', @h4, '-', @h5
|
|
));
|
|
END
|