Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menghasilkan UUIDv4 di MySQL?

Saya telah menghabiskan beberapa waktu mencari solusi dan menemukan fungsi mysql berikut yang menghasilkan UUID acak (yaitu UUIDv4) menggunakan fungsi MySQL standar. Saya menjawab pertanyaan saya sendiri untuk membagikannya dengan harapan dapat bermanfaat.

-- Change delimiter so that the function body doesn't end the function declaration
DELIMITER //

CREATE FUNCTION uuid_v4()
    RETURNS CHAR(36) NO SQL
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 ;

Catatan:Pembuatan nomor pseudo-acak yang digunakan (RAND MySQL's ) tidak aman secara kriptografis sehingga memiliki beberapa bias yang dapat meningkatkan risiko tabrakan.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. login dengan nama pengguna atau alamat email di php

  2. Cara Membuat Penggunaan Fungsi Komentar Terbaik di MySQL

  3. mysql order by, null dulu, dan DESC setelahnya

  4. Periksa bahasa string berdasarkan mesin terbang di PHP

  5. Cara menghapus teks antara 2 karakter menggunakan kueri di MYSQL