Тип данных JSON
Псевдоним JSON был добавлен, чтобы предоставить возможность использования столбцов JSON в базирующихся на операциях репликации от MySQL к MariaDB, а также для возможности чтения MariaDB mysqldumps из MySQL.
JSON — это псевдоним для LONGTEXT, введённый по причинам совместимости с типом данных JSON MySQL. MariaDB реализует это как LONGTEXT, так как тип данных JSON противоречит стандарту SQL, а тесты MariaDB показывают, что производительность по крайней мере эквивалентна.
Для обеспечения вставки валидного JSON-документа можно использовать функцию JSON_VALID в качестве ограничения CHECK. Это ограничение автоматически включается для типов, использующих псевдоним JSON, начиная с MariaDB 10.4.3.
Примеры
CREATE TABLE t (j JSON); DESC t; +-------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+----------+------+-----+---------+-------+ | j | longtext | YES | | NULL | | +-------+----------+------+-----+---------+-------+
С валидацией:
CREATE TABLE t2 (
j JSON
CHECK (JSON_VALID(j))
);
INSERT INTO t2 VALUES ('invalid');
ERROR 4025 (23000): CONSTRAINT `j` failed for `test`.`t2`
INSERT INTO t2 VALUES ('{"id": 1, "name": "Monty"}');
Query OK, 1 row affected (0.13 sec)
Репликация данных JSON между MySQL и MariaDB
Тип данных JSON в MySQL хранит JSON-объект в компактном формате, а не как LONGTEXT, как в MariaDB. Это означает, что репликация на основе строк не будет работать для типов JSON из MySQL в MariaDB.
Существует несколько способов решения этой проблемы:
- Используйте репликацию на основе операций.
- Измените столбец JSON на тип TEXT в MySQL.
- Если вам необходимо использовать репликацию на основе строк и вы не можете изменить MySQL-мастер с JSON на TEXT, вы можете попробовать добавить промежуточный MySQL-слейв и изменить тип столбца с JSON на TEXT на нём. Затем реплицируйте данные с этого промежуточного слейва в MariaDB.
Преобразование таблицы MySQL с полями JSON в MariaDB
MariaDB не может напрямую получить доступ к формату JSON MySQL.
Существует несколько способов перемещения таблицы в MariaDB:
- Начиная с MariaDB 10.5.7, вы можете использовать плагин mysql_json. Смотрите Making MariaDB understand MySQL JSON.
- Измените столбец JSON на тип TEXT в MySQL. После этого MariaDB может напрямую использовать таблицу без необходимости создания дампов и восстановления.
- Используйте mysqldump для копирования таблицы.
Отличия между строками JSON MySQL и строками JSON MariaDB
- В MySQL JSON является объектом и сравнивается согласно значениям JSON. В MariaDB JSON-строки являются обычными строками и сравниваются как строки. Исключением является использование JSON_EXTRACT(), в этом случае строки деэкранируются перед сравнением.
См. также
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/json-data-type/