Spec-Zone.ru › MariaDB

Тип данных 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(), в этом случае строки деэкранируются перед сравнением.

См. также

  • Функции JSON
  • Тип таблицы CONNECT JSON
  • MDEV-9144
Содержимое, воспроизведенное на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проходит предварительную проверку MariaDB. Мнения, информация и мнения, выраженные в данном содержимом, не обязательно отражают точку зрения MariaDB или любой другой стороны.

© 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/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API