Mysql
 sql >> база данни >  >> RDS >> Mysql

Вмъкване и избор на UUID като двоични (16)

И така, като отговор на коментари. Правилният начин за съхраняване на 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, които могат да бъдат направени естествено с помощта на тези функции. Ако сте на

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Каква е разликата между utf8mb4 и utf8 набори от знаци в MySQL?

  2. Списък на спецификаторите на формата на датата в MySQL

  3. mysql подреждане по, null първо и DESC след

  4. MySQL изтрива ред от множество таблици

  5. колона с времева марка на mysql