MariaDB 是否支持原生 JSON 列数据类型?

Omr*_*nic 16 mariadb json

我不是在谈论动态列,而是在询问原生列 JSON 数据类型。简单来说,我可以在任何 MariaDB 版本上运行以下代码吗?

CREATE TABLE example (names JSON);
Run Code Online (Sandbox Code Playgroud)

据我所知,它没有,但我仍然不确定,因为有很多话题谈论 MariaDB 上的 JSON 支持已经很久了,但没有人说它最终实现了。

- 更新 -

刚刚在 MariaDB Jira 上发现三个关于 JSON 数据类型支持的问题仍然存在,这意味着它还没有实现,对吧?

Jos*_*ine 10

MariaDB 10.2 将支持 JSON。请参阅2017 年 2 月 28 日发布的官方 MariaDB 博客文章。有一些示例 SQL 语句和验证。

JSON 正迅速成为数据交换和非结构化数据的标准格式,MariaDB 10.2 增加了一系列 JSON 支持功能,即使 JSON 数据类型尚未实现。没有 JSON 数据类型有一些原因,但一个是因为 JSON 是一种基于文本的格式,因此实际上没有那么多优势。这篇博文旨在描述 JSON 及其用例,描述 MariaDB 10.2 JSON 函数及其用途,并展示 MariaDB 10.2 的其他一些对 JSON 处理有用的附加功能。

  • 直到 10.2.6,还不支持原生 JSON。 (2认同)
  • 仍然在 2020-04 年使用 MariaDB 10.5.2-beta,JSON 仍然只是 LONGTEXT 的别名,他们没有合适的 JSON 数据类型(还没有?) - 但 MySQL 自 2015-08 以来就支持它 (2认同)

Eva*_*oll 9

这取决于您说“数据类型”时的意思。一些数据库(如 PostgreSQL)具有 JSON 数据类型,允许全文搜索、二进制存储机制、索引和全套运算符来访问数据。玛丽亚还没有那个。MDEV-9144正在跟踪具体的数据类型。

尽管如此,还是给 MySQL带来了非常有限的类型,来自一位 bug 维护者,

JSON 数据类型直接与 SQL 标准相矛盾,即 JSON_* 函数将字符串作为参数。此外,速度明智的 MariaDB 不需要二进制 JSON,根据我们的基准测试,我们的 JSON 解析器在文本 JSON 上的速度与 MySQL 在二进制 JSON 上的速度一样快。也就是说,在 MariaDB 中,JSON 可以是 VARCHAR 或 TEXT。如果需要验证,可以使用 CHECK 约束进行验证:

my_json_column TEXT CHECK (JSON_VALID(my_json_column))
Run Code Online (Sandbox Code Playgroud)

不过,我们将为 MySQL 兼容性添加 JSON“类型”。

从我的阅读来看,这并不是二进制 JSON 的重点,让我们参考MySQL 文档

二进制格式的结构使服务器能够直接通过键或数组索引查找子对象或嵌套值,而无需读取文档中它们之前或之后的所有值。

此外,PostgreSQL的jsonb了很多不止于此。

jsonb 数据以分解的二进制格式存储,由于增加了转换开销,因此输入速度稍慢,但处理速度明显更快,因为不需要重新解析。jsonb 还支持索引,这是一个显着的优势。

tldr; Maria DB 还没有 JSON 类型。即使它获得“类型”,它也只是文本验证(如 PostgreSQL 的json类型)的一个薄包装器。没有针对二进制 JSON 类型(如 PostgreSQL 的jsonb)的计划,因为开发人员似乎不了解其优势。