Как передать двоичный код (16) в функцию mysql в качестве аргумента - PullRequest
0 голосов
/ 06 июня 2019

Я хотел бы передать uuid версии varbinary (16) пользовательской функции в версии MySQL 5.7.x - выдает ошибку

1406 - слишком длинные данные для столбца

У меня есть таблица с uuid первичным ключом типа varbinary(16) - я хотел бы преобразовать двоичный файл (16) в читаемую человеком версию, поэтому я написал функцию для преобразования двоичной версии.

CREATE DEFINER=`bala`@`localhost` 
FUNCTION `bin_to_uuid`(`uuid` BINARY(32)) 
    RETURNS varchar(32) CHARSET latin1
NO SQL
return LOWER(CONCAT(
    SUBSTR(HEX(uuid), 1, 8), '-',
    SUBSTR(HEX(uuid), 9, 4), '-',
    SUBSTR(HEX(uuid), 13, 4), '-',
    SUBSTR(HEX(uuid), 17, 4), '-',
    SUBSTR(HEX(uuid), 21)
))

SELECT bin_to_uuid((UNHEX(REPLACE(uuid(), "-",""))))

MySQL версия 5.7.x

1 Ответ

0 голосов
/ 06 июня 2019

Тип возвращаемого значения - varchar(32), но с добавленными дефисами возвращаемый текст имеет длину 36 символов.

Измените тип возврата на varchar(36).

...