MySQL'in UUID
işlevi, UUIDv1 GUID değerini döndürür. SQL'de rasgele GUID'ler (ör. UUIDv4) oluşturmak için kolay bir yol arıyorum.MySQL'de bir UUIDv4 nasıl oluşturulur?
6
A
cevap
10
Bir çözüm arayan oldukça uzun bir zaman geçirdi ve standart MySQL fonksiyonları kullanarak rastgele UUID (yani UUIDv4) üretir aşağıdaki mysql fonksiyonu ile geldi. Ben yararlı olacağını umuduyla paylaşmak için kendi sorumu yanıtlıyorum.
-- Change delimiter so that the function body doesn't end the function declaration
DELIMITER //
CREATE FUNCTION uuid_v4()
RETURNS CHAR(36)
BEGIN
-- Generate 8 2-byte strings that we will combine into a UUIDv4
SET @h1 = LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
SET @h2 = LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
SET @h3 = LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
SET @h6 = LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
SET @h7 = LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
SET @h8 = LPAD(HEX(FLOOR(RAND() * 0xffff)), 4, '0');
-- 4th section will start with a 4 indicating the version
SET @h4 = CONCAT('4', LPAD(HEX(FLOOR(RAND() * 0x0fff)), 3, '0'));
-- 5th section first half-byte can only be 8, 9 A or B
SET @h5 = CONCAT(HEX(FLOOR(RAND() * 4 + 8)),
LPAD(HEX(FLOOR(RAND() * 0x0fff)), 3, '0'));
-- Build the complete UUID
RETURN LOWER(CONCAT(
@h1, @h2, '-', @h3, '-', @h4, '-', @h5, '-', @h6, @h7, @h8
));
END
//
-- Switch back the delimiter
DELIMITER ;
Not: kullanılan sözde rasgele sayı nesil (MySQL en RAND
) kriptografik değildir ve bu nedenle çarpışma riskini artırabilir bazı önyargı vardır.