MYSQL: JSON_OBJECT с двоичными данными

0

Когда я выберу 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)) ));
  • 0
    Когда я копирую ваш запрос , кажется, что длина вашей строки составляет 25 символов, а не 16. Какую версию сервера / набор символов соединения вы используете?
  • 0
    Я использую MYSQL 5.7 Кроме того, когда я копирую из этого запроса, он не будет работать.
Показать ещё 4 комментария
Теги:

1 ответ

0
Лучший ответ

JSON_OBJECT проверяет тип возврата при решении вопроса о том, как он будет кодировать данные. По данным вопроса, типы данных BINARY кодируются как base64.

Изменение типа возврата в BIN_TO_UUID на VARCHAR заставит кодирование использовать чистый текстовый формат при кодировании этого кода JSON,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню