Я пытаюсь построить функцию, которая возвращает JSON.
Я обновил MySQL Workbench до 8.0.14 и попробовал следующий код:
SELECT JSON_OBJECT(
'name_field', name_field,
'address_field', address_field,
'contact_age', contact_age
)
FROM contact;
Но появляется следующая ошибка:
Код ошибки: 1305. FUNCTION datalog.json_object не существует
Я думал, что json_object - это стандартная функция mysql, не так ли?
Смотрите здесь: JSON Object
Вы используете MariaDB, а не MySQL, и ваша версия (MariaDB 10.1) примерно сопоставима с MySQL 5.7 с некоторыми существенными отличиями. Ваша версия Workbench не имеет значения - важна версия сервера.
https://mariadb.com/kb/en/library/mariadb-vs-mysql-compatibility/
MariaDB 10.1 и выше не поддерживает упакованные в JSQL объекты MySQL 5.7. MariaDB следует стандарту SQL и сохраняет JSON как обычный текст/большой двоичный объект. Если вы хотите реплицировать столбцы JSON из MySQL в MariaDB, вам следует хранить объекты JSON в MySQL в столбце TEXT или использовать репликацию на основе операторов. Если вы используете столбцы JSON и хотите выполнить обновление до MariaDB, вы можете преобразовать столбцы JSON в TEXT или использовать mysqldump для копирования этих таблиц в MariaDB. В MySQL JSON сравнивается по значениям json. В MariaDB строки JSON являются обычными строками и сравниваются как строки.
MariaDB 10.2.3 добавляет поддержку JSON_OBJECT. https://mariadb.com/kb/en/library/json_object/
Попробуйте этот запрос:
SELECT @@version;
Если он показывает версию MySQL менее 5.7.8, значит, ваш MySQL сервер слишком стар для поддержки новых функций JSON.
MySQL Workbench - это клиентское приложение, его версия не обязательно совпадает с версией MySQL Server, к которой он подключается.
Это может быть глупым ответом, но вы проверили, что ваш search_path правильный? У меня была эта ошибка, когда система не знает, в какой схеме искать.
Могли бы попробовать:
SET search_path = youschema;
выше кода, который вы написали.
SELECT VERSION();
выход?