Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDB: Как использовать UUID? / 15 сообщений из 15, страница 1 из 1
14.10.2019, 12:19
    #39875900
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Есть таблицы из постгреса, в которых используется тип данных UUID.
В постресе он есть, но что использовать и как в MariaDB для переноса таких таблиц?
...
Рейтинг: 0 / 0
14.10.2019, 12:30
    #39875909
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
binary(16) с ручным перекодированием uuid в binary(16). Или вовсе текстовые.
Может быть когда-нибудь, но пока задача уже 4 года как с major приоритетом https://jira.mariadb.org/browse/MDEV-4958
...
Рейтинг: 0 / 0
14.10.2019, 16:18
    #39876091
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Ясно, сделал через 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
14.10.2019, 21:53
    #39876282
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Ролг Хупин,

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

MySQL, начиная с версии 8.0.13, такое точно умеет.
См. https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html
...
Рейтинг: 0 / 0
15.10.2019, 09:15
    #39876343
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
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
15.10.2019, 09:30
    #39876346
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Ролг ХупинВ постресе он есть, но что использовать и как в MariaDB для переноса таких таблиц?
В постгрессе он, конечно, есть. Но что он представляет из себя внутренне - документация не говорит. Внешне же он, как обычно, отображается как 36-символьная строка.

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

Хотя, наверное, это не так важно из-за строгой типизации... Впрочем, знание того, что каждый раз UUID гоняется из бинара в строку и обратно на пути между клиентом и диском, тоже небесполезно.
...
Рейтинг: 0 / 0
15.10.2019, 10:32
    #39876394
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
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
15.10.2019, 10:46
    #39876408
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Свои функции тоже нельзя.
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
15.10.2019, 11:10
    #39876431
Melkij
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Akina Melkij , я не совсем об этом. Я о том, как интерпретируется в процессе обработки. Снаружи строка, в памяти и на диске бинар, а в серединке? Например, при сравнении что сравнивается - бинарное представление, строковое, или бинарное как строковое с бинарным collation? Когда выполняется преобразование?
оффтоп, конечно.... Сравниваются бинарники за один вызов memcmp . Преобразование на входе выполняется когда разбор запроса определяет, что этот литерал в запросе должен быть обработан как тип uuid. И на выходе готовых таплов в текстовом представлении протокола. Или вовсе никакого преобразования не выполняется для бинарной передачи, см. uuid_recv/uuid_send чуть выше в uuid.c
...
Рейтинг: 0 / 0
15.10.2019, 11:20
    #39876442
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
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
15.10.2019, 11:33
    #39876455
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MariaDB: Как использовать UUID?
Ролг ХупинТ.е. надо понимать, " expression or function" - не юзерская функция, а только их встроенная?да, именно так.
Как я понимаю, это сделано чтобы значение было детерменистичным от времени.
Свою-то функцию вы можете и удалить, и поменять.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / MariaDB: Как использовать UUID? / 15 сообщений из 15, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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