【发布时间】:2018-09-15 03:01:11
【问题描述】:
当我从数据库中选择 JSON_OBJECT 时,它会给我带来意想不到的结果。
select JSON_OBJECT('test', BIN_TO_UUID('GÇ~pw–’Ú¦[¦£´Æ'));
{ "test": "base64:type254:Nzc5NjkyZGEtN2U3MC00N2M3LWE2MWMtNWJhNmEzYjQxZWM2"}
我想要这样的结果
{"test": "779692da-7e70-47c7-a61c-5ba6a3b41ec6"}
我正在使用 MYSQL 5.7。
另外,当我从这个查询中复制时,它不起作用。
此代码将正常工作。
SELECT JSON_OBJECT('test', BIN_TO_UUID(UUID_TO_BIN(UUID())));
这是我的 UUID_TO_BIN 和 BIN_TO_UUID 函数
CREATE FUNCTION UUID_TO_BIN(_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 BIN_TO_UUID(_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)) ));
【问题讨论】:
-
当我copy your query 时,您的字符串的长度似乎是 25 个字符而不是 16 个字符。您使用的是什么服务器版本/连接字符集?
-
我使用的是 MYSQL 5.7 另外,当我从这个查询中复制时,它不起作用。
-
我在 MySQL-5.7 中没有看到 BIN_TO_UUID 函数,并且在 5.7 中出现错误“错误:ER_SP_DOES_NOT_EXIST: FUNCTION test.BIN_TO_UUID 不存在”。它是您创建/复制/安装的插件/或功能吗?
-
我编辑了问题并添加了我目前正在使用的功能。
-
这有帮助,更改 BIN_TO_UUID 以返回 VARCHAR。我不确定你的功能是否正确。似乎返回与 MySQL-8.0 不同的结果
标签: mysql