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

Chèn và chọn UUID dưới dạng nhị phân (16)

Vì vậy, như một phản hồi cho các ý kiến. Cách chính xác để lưu trữ UUID 36 ký tự dưới dạng nhị phân (16) là thực hiện chèn theo cách như:

INSERT INTO sometable (UUID) VALUES
       (UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))

UNHEX bởi vì UUID đã là một giá trị được hex. Chúng tôi cắt (REPLACE ) các dấu gạch ngang trong câu lệnh để giảm độ dài xuống 32 ký tự (16 byte của chúng tôi được biểu thị dưới dạng HEX ). Rõ ràng là bạn có thể thực hiện việc này bất kỳ lúc nào trước khi lưu trữ, vì vậy cơ sở dữ liệu không cần phải xử lý nó.

Bạn có thể truy xuất UUID như thế này:

SELECT HEX(UUID) FROM sometable;

Đề phòng trường hợp ai đó bắt gặp chuỗi này và không chắc chắn về cách hoạt động của chuỗi này.

Và hãy nhớ:Nếu bạn đang chọn một hàng bằng UUID, hãy sử dụng UNHEX() với điều kiện :

SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');

hoặc ký hiệu chữ (như Alexis Wilke đã đề cập):

SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;

Và KHÔNG PHẢI HEX() trên cột:

SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';

Giải pháp cuối cùng, trong khi nó hoạt động, yêu cầu MySQL HEX es tất cả các UUID trước khi nó có thể xác định hàng nào phù hợp. Nó rất kém hiệu quả.

Chỉnh sửa:Nếu bạn đang sử dụng MySQL 8, bạn nên xem các hàm UUID như được đề cập trong câu trả lời của SlyDave. Câu trả lời này vẫn đúng, nhưng nó không tối ưu hóa các chỉ mục UUID có thể được thực hiện nguyên bản bằng cách sử dụng các chức năng đó. Nếu bạn đang sử dụng

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ckfinder php 2.6.2 cài đặt xem, hiển thị, sắp xếp không hoạt động

  2. Nối các bảng trong MySql với một trường chung nhưng các giá trị khác nhau cho trường chung

  3. Định nghĩa của cardinality trong SQL là gì

  4. Có thể sử dụng kết quả của một hàm SQL như một trường trong Doctrine không?

  5. Nhóm nhiều câu lệnh Mysql để tìm nạp số lượng nhiều trạng thái