【问题标题】:MYSQL: JSON_OBJECT with binary dataMYSQL:带有二进制数据的 JSON_OBJECT
【发布时间】: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


【解决方案1】:

JSON_OBJECT 在决定如何编码数据时检查返回类型。如问题所示,BINARY 数据类型被编码为 base64。

将 BIN_TO_UUID 上的返回类型更改为 VARCHAR 将使编码在将其编码为 JSON 时使用纯文本格式,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-01
    • 1970-01-01
    • 2010-10-03
    • 2014-04-03
    相关资源
    最近更新 更多