powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDB: Как использовать UUID?
15 сообщений из 15, страница 1 из 1
MariaDB: Как использовать UUID?
    #39875900
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблицы из постгреса, в которых используется тип данных UUID.
В постресе он есть, но что использовать и как в MariaDB для переноса таких таблиц?
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39875909
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
binary(16) с ручным перекодированием uuid в binary(16). Или вовсе текстовые.
Может быть когда-нибудь, но пока задача уже 4 года как с major приоритетом https://jira.mariadb.org/browse/MDEV-4958
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876091
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ясно, сделал через varchar(36), смотрю, как сделать в бинарном виде

Код: plsql
1.
2.
3.
4.
CREATE TABLE t1 (
  uuid_field     VARCHAR(36) DEFAULT (uuid()),
  binary_uuid    BINARY(16)  DEFAULT (UUID_TO_BIN(UUID()))
);



Но Маня выдает:

Function or expression '`UUID_TO_BIN`()' cannot be used in the DEFAULT clause of `binary_uuid`

1. почему в первом поле прошло, а во втором нет?
Так сработало:
Код: plsql
1.
2.
3.
4.
CREATE TABLE t2 (
  uuid_field     VARCHAR(32) DEFAULT (uuid()),
  binary_uuid    BINARY(16)
);



2. как все-таки сделать такую таблицу t1 с функциями в дефолтах?
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876282
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,

MariaDB какой версии? Не слишком старая?

MySQL, начиная с версии 8.0.13, такое точно умеет.
См. https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876343
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftРолг Хупин,

MariaDB какой версии? Не слишком старая?

MySQL, начиная с версии 8.0.13, такое точно умеет.
См. https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html

не, самая свежая,

select @@version
10.4.8-MariaDB
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876346
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинВ постресе он есть, но что использовать и как в MariaDB для переноса таких таблиц?
В постгрессе он, конечно, есть. Но что он представляет из себя внутренне - документация не говорит. Внешне же он, как обычно, отображается как 36-символьная строка.

При переносе данных в MySQL/MariaDB подходящим типом для UUID является строковый тип соотв. размера - BINARY(36) или CHAR(36). Поскольку длина фиксирована - VARCHAR/VARBINARY не имеет смысла.
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876363
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkinaРолг ХупинВ постресе он есть, но что использовать и как в MariaDB для переноса таких таблиц?
В постгрессе он, конечно, есть. Но что он представляет из себя внутренне
16 байт
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876373
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинUUID_TO_BIN()а что-то я вообще не вижу такой функции в доке по MariaDB.
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876374
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876375
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Melkij , я не совсем об этом. Я о том, как интерпретируется в процессе обработки. Снаружи строка, в памяти и на диске бинар, а в серединке? Например, при сравнении что сравнивается - бинарное представление, строковое, или бинарное как строковое с бинарным collation? Когда выполняется преобразование?

Хотя, наверное, это не так важно из-за строгой типизации... Впрочем, знание того, что каждый раз UUID гоняется из бинара в строку и обратно на пути между клиентом и диском, тоже небесполезно.
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876394
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoft https://mariadb.com/kb/en/library/function-differences-between-mariadb-104-and-mysql-80/

Возможно, я перетопил, хорошо, сделал так

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
DELIMITER //

CREATE FUNCTION UuidToBin(_uuid BINARY(36))
    RETURNS BINARY(16)
    LANGUAGE SQL  DETERMINISTIC  CONTAINS SQL  SQL SECURITY INVOKER
RETURN
    UNHEX(CONCAT(
        SUBSTR(_uuid, 15, 4),
        SUBSTR(_uuid, 10, 4),
        SUBSTR(_uuid,  1, 8),
        SUBSTR(_uuid, 20, 4),
        SUBSTR(_uuid, 25) ));
//
CREATE FUNCTION UuidFromBin(_bin BINARY(16))
    RETURNS BINARY(36)
    LANGUAGE SQL  DETERMINISTIC  CONTAINS SQL  SQL SECURITY INVOKER
RETURN
    LCASE(CONCAT_WS('-',
        HEX(SUBSTR(_bin,  5, 4)),
        HEX(SUBSTR(_bin,  3, 2)),
        HEX(SUBSTR(_bin,  1, 2)),
        HEX(SUBSTR(_bin,  9, 2)),
        HEX(SUBSTR(_bin, 11))
             ));

//
DELIMITER ;
    
CREATE TABLE t1 (
  uuid_field     VARCHAR(32) DEFAULT (uuid()),
  binary_uuid    BINARY(16)  DEFAULT (UuidToBin(UUID()))
);
----------------
Function or expression '`UuidToBin`()' cannot be used in the DEFAULT clause of `binary_uuid`
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876408
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Свои функции тоже нельзя.
https://mariadb.com/kb/en/library/create-table/#default-column-option The DEFAULT clause cannot contain any stored functions or subqueries

Можно попробовать как-то так:
UNHEX(REPLACE(UUID(),'-',''))
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876431
Melkij
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina Melkij , я не совсем об этом. Я о том, как интерпретируется в процессе обработки. Снаружи строка, в памяти и на диске бинар, а в серединке? Например, при сравнении что сравнивается - бинарное представление, строковое, или бинарное как строковое с бинарным collation? Когда выполняется преобразование?
оффтоп, конечно.... Сравниваются бинарники за один вызов memcmp . Преобразование на входе выполняется когда разбор запроса определяет, что этот литерал в запросе должен быть обработан как тип uuid. И на выходе готовых таплов в текстовом представлении протокола. Или вовсе никакого преобразования не выполняется для бинарной передачи, см. uuid_recv/uuid_send чуть выше в uuid.c
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876442
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftСвои функции тоже нельзя.
https://mariadb.com/kb/en/library/create-table/#default-column-option The DEFAULT clause cannot contain any stored functions or subqueries

Можно попробовать как-то так:
UNHEX(REPLACE(UUID(),'-',''))

То, что свои нельзя - это, конечно, хреновато....

Но, вот они пишут:
https://mariadb.com/kb/en/library/create-table/

авторDEFAULT Column Option
MariaDB starting with 10.2.1
The DEFAULT clause was enhanced in MariaDB 10.2.1. Some enhancements include

BLOB and TEXT columns now support DEFAULT.
The DEFAULT clause can now be used with an expression or function.



Т.е. надо понимать, " expression or function" - не юзерская функция, а только их встроенная?
...
Рейтинг: 0 / 0
MariaDB: Как использовать UUID?
    #39876455
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг ХупинТ.е. надо понимать, " expression or function" - не юзерская функция, а только их встроенная?да, именно так.
Как я понимаю, это сделано чтобы значение было детерменистичным от времени.
Свою-то функцию вы можете и удалить, и поменять.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDB: Как использовать UUID?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]