Когда я выберу 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)) ));
JSON_OBJECT проверяет тип возврата при решении вопроса о том, как он будет кодировать данные. По данным вопроса, типы данных BINARY кодируются как base64.
Изменение типа возврата в BIN_TO_UUID на VARCHAR заставит кодирование использовать чистый текстовый формат при кодировании этого кода JSON,