Jadi, sebagai tanggapan atas komentar. Cara yang benar untuk menyimpan UUID 36-char sebagai biner(16) adalah dengan melakukan penyisipan dengan cara seperti:
INSERT INTO sometable (UUID) VALUES
(UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))
UNHEX
karena UUID sudah merupakan nilai hexed. Kami memangkas (REPLACE
) tanda hubung dalam pernyataan untuk mengurangi panjang menjadi 32 karakter (16 byte kami direpresentasikan sebagai HEX
). Anda dapat melakukan ini kapan saja sebelum menyimpannya, tentu saja, sehingga tidak harus ditangani oleh database.
Anda dapat mengambil UUID seperti ini:
SELECT HEX(UUID) FROM sometable;
Untuk berjaga-jaga jika seseorang menemukan utas ini dan tidak yakin bagaimana cara kerjanya.
Dan ingat:Jika Anda memilih baris menggunakan UUID, gunakan UNHEX()
dengan syarat :
SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');
atau notasi literal (seperti yang disebutkan oleh Alexis Wilke):
SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;
Dan BUKAN HEX()
pada kolom:
SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';
Solusi terakhir, saat berfungsi, mengharuskan MySQL HEX
es semua UUID sebelum dapat menentukan baris mana yang cocok. Ini sangat tidak efisien.
Sunting:Jika Anda menggunakan MySQL 8, Anda harus melihat fungsi UUID seperti yang disebutkan dalam jawaban SlyDave. Jawaban ini masih benar, tetapi tidak mengoptimalkan indeks UUID yang dapat dilakukan secara asli menggunakan fungsi-fungsi tersebut. Jika Anda menggunakan