Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Làm thế nào để tạo một UUIDv4 trong MySQL?

Tôi đã dành khá nhiều thời gian để tìm giải pháp và đã nghĩ ra hàm saumysql tạo một UUID ngẫu nhiên (tức là UUIDv4) bằng cách sử dụng các Hàm MySQL tiêu chuẩn. Tôi đang trả lời câu hỏi của chính mình để chia sẻ điều đó với hy vọng rằng nó sẽ hữu ích.

-- 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 ;

Lưu ý:Việc tạo số giả ngẫu nhiên được sử dụng (RAND của MySQL ) không an toàn về mặt mật mã và do đó có một số sai lệch có thể làm tăng xung đột.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cơ sở dữ liệu codeigniter di chuyển sang một bảng khác

  2. Cách tạo cơ sở dữ liệu MySQL và đặt đặc quyền

  3. JDBC luôn kiểm tra hàng cuối cùng của bảng MySQL?

  4. Các truy vấn liên quan đến hiệu suất Phalcon

  5. Làm cách nào để thực hiện thăm dò cơ sở dữ liệu thời gian thực trong MySQL / PHP?