Чи підтримує MariaDB нативний тип даних у стовпці JSON?


13

Я не кажу про динамічні стовпчики, я про питання про тип даних JSON в нашому стовпчику. Простими словами, чи можу я виконати наступний код на будь-якій версії MariaDB?

CREATE TABLE example (names JSON);

Наскільки я знаю, це не так, але я все ще не впевнений, оскільки багато тем розмовляють про підтримку JSON на MariaDB протягом століть, але жодна не сказала, що вона остаточно реалізована.

- Оновлення -

Щойно знайдені три питання, які досі залишаються відкритими на MariaDB Jira про підтримку типу даних JSON, а це означає, що вона ще не реалізована, правда?


Про це оновлення не повинно бути в питанні, це відповідь. Вам слід це перенести і самовідповістись. @Omranic.
Еван Керролл

> JSON - псевдонім для LONGTEXT, представлений з міркувань сумісності з типом даних JSON даних MySQL. mariadb.com/kb/en/library/json-data-type
zx1986

Відповіді:


7

Підтримка JSON надійде до MariaDB 10.2. Дивіться офіційне повідомлення в блозі MariaDB від 28.02.2017. Є кілька прикладів SQL-операторів та перевірки.

JSON швидко стає стандартним форматом для обміну даними та для неструктурованих даних, а MariaDB 10.2 додає діапазон функцій підтримки JSON, хоча тип даних JSON ще не впроваджений. Є кілька причин, чому немає типу даних JSON, але одна полягає в тому, що насправді не так багато переваг перед цим, оскільки JSON - це текстовий формат. Ця публікація в блозі має на меті описати JSON та випадки використання для нього, а також описати функції MariaDB 10.2 JSON та їх використання, а також показати деякі інші доповнення до MariaDB 10.2, які корисні для обробки JSON.


2
До 10.2.6, ще не підтримує рідний JSON.
kittygirl

1
Вони зберігають json як звичайний текст лише станом на 10.3
Musa

6

Це залежить від того, що ви маєте на увазі, коли ви говорите "тип даних". Деякі бази даних, такі як PostgreSQL, мають тип даних JSON, який дозволяє отримати повний текст, механізм двійкового зберігання, індексацію та повний набір операторів для доступу до даних. Марія ще цього не має. Тип даних спеціально відслідковується MDEV-9144 .

Незважаючи на те, що це дуже обмежений тип для MySQL від одного з підтримувачів помилок,

Тип даних JSON прямо суперечить стандарту SQL, що говорить про те, що функції JSON_ * приймають рядок як аргумент. Крім того, MariaDB для швидкої роботи не потребує бінарного JSON, згідно з нашими орієнтирами, наш аналізатор JSON настільки швидкий на тексті JSON, як і MySQL на двійковому JSON. Тобто, у MariaDB можна було б VARCHAR або TEXT для JSON. Якщо потрібна перевірка, це можна зробити з обмеженням ПЕРЕВІРИТИ:

my_json_column TEXT CHECK (JSON_VALID(my_json_column))

Ми додамо "тип" JSON для сумісності MySQL.

З мого читання, це не зовсім суть двійкового JSON, давайте звернемось до документів MySQL

Бінарний формат побудований так, щоб сервер міг шукати субекти або вкладені значення безпосередньо за індексом ключа або масиву, не читаючи в документі всіх значень до або після них.

Знову ж таки, PostgreSQLjsonb робить набагато більше, ніж це.

Дані jsonb зберігаються у розкладеному двійковому форматі, що робить його трохи повільнішим для введення через додаткові накладні перетворення, але значно швидше обробляти, оскільки повторне повторне повторне опитування не потрібно. jsonb також підтримує індексацію, що може бути суттєвою перевагою.

tldr; Maria DB ще не має типу JSON. Навіть коли він отримує "тип", це лише тонка обгортка над валідацією тексту (наприклад, jsonтип PostgreSQL ). Немає планів для двійкового типу JSON (наприклад, PostgreSQL jsonb), оскільки розробники, схоже, не розуміють переваг.


1
Користувачеві дійсно все одно, чи зберігається JSON у Postgres складеним чи розкладеним, чи двійковий json чи ні. Для JSON важливо: а) те, що ви поставите, ви виходите, і є можливість перевірити правильність введення. б) ви можете індексувати та шукати частини JSON. 3) На ньому функціонують функції.
Владислав Вайнтруб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.