-1

我想将版本 varbinary(16) 的 uuid 传递给 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

4

1 回答 1

0

返回类型为varchar(32),但添加连字符后,您返回的文本长度为 36 个字符。

将返回类型更改为varchar(36).

于 2019-06-06T15:44:33.270 回答