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