И така, като отговор на коментари. Правилният начин за съхраняване на UUID с 36 символа като двоичен(16) е да извършите вмъкването по начин като:
INSERT INTO sometable (UUID) VALUES
(UNHEX(REPLACE("3f06af63-a93c-11e4-9797-00505690773f", "-","")))
UNHEX
тъй като UUID вече е шестнадесетична стойност. Подрязваме (REPLACE
) тирета в изявлението, за да намали дължината до 32 знака (нашите 16 байта, представени като HEX
). Можете да направите това по всяко време, преди да го съхраните, очевидно, така че не е нужно да се обработва от базата данни.
Можете да извлечете UUID по следния начин:
SELECT HEX(UUID) FROM sometable;
Само в случай, че някой попадне на тази тема и не е сигурен как работи.
И запомнете:Ако избирате ред с помощта на UUID, използвайте UNHEX()
при условиета :
SELECT * FROM sometable WHERE UUID = UNHEX('3f06af63a93c11e4979700505690773f');
или буквална нотация (както е споменато от Алексис Уилке):
SELECT * FROM sometable WHERE UUID = 0x3f06af63a93c11e4979700505690773f;
И НЕ HEX()
на колоната:
SELECT * FROM sometable WHERE HEX(UUID) = '3f06af63a93c11e4979700505690773f';
Последното решение, докато работи, изисква MySQL HEX
е всички UUID, преди да може да определи кои редове съвпадат. Много е неефективно.
Редактиране:Ако използвате MySQL 8, трябва да погледнете функциите на UUID, както е споменато в отговора на SlyDave. Този отговор все още е правилен, но не оптимизира индексите на UUID, които могат да бъдат направени естествено с помощта на тези функции. Ако сте на