如何将二进制(16)作为参数传递给mysql函数

时间:2019-06-06 15:40:22

标签: mysql binary uuid mysql-5.7 mysql-function

我想将版本varbinary(16)的uuid传递给MySQL版本5.7.x中的用户定义函数-它将引发错误

  

1406-数据对于列而言太长了

我有一个带有uuid类型的varbinary(16)主键的表-我想将binary(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 :(得分:0)

返回类型为{ "Environment": "NonProd", "Severity": "Critical", "Category": [ "Data", "EMR" ] } ,但是添加了连字符后,返回的文本长度为36个字符。

将返回类型更改为varchar(32)