用途:在 MariaDB 中声明 JSON 列、选择正确的提取函数、通过生成列索引 JSON 路径、合并文档并校验 JSON 结构,同时规避 MariaDB 与 MySQL 的 JSON 行为差异。
主要能力与要点:MariaDB 的 JSON 是 LONGTEXT 的别名,并非 MySQL 5.7.8+ 的原生二进制存储,应始终加 CHECK (JSON_VALID(col)) 做结构校验。JSON_VALUE 返回标量,JSON_QUERY 返回 JSON 子树,JSON_EXTRACT 返回 JSON(标量带引号),WHERE 与函数索引中应使用 JSON_VALUE。合并用 JSON_MERGE_PATCH(RFC 7396,patch 中 JSON null 会删除键)或 JSON_MERGE_PRESERVE(数组拼接),不要用已废弃的 JSON_MERGE。索引需先建虚拟或持久生成列再建索引,MariaDB 不支持直接表达式索引。JSON_TABLE(10.6+)可将数组转为关系行,支持 NESTED PATH、FOR ORDINALITY、EXISTS PATH,ON EMPTY/ON ERROR 可选 NULL、DEFAULT 'literal'、ERROR。JSON 路径用 $、.key、[N]、[*]、**(递归下降,须后接步骤),负索引与范围 [M to N] 为 10.9+。列排序规则为 utf8mb4_bin,连接应执行 SET NAMES utf8mb4。MySQL 主库到 MariaDB 从库的行复制不支持 JSON 列,需用语句复制或先转 TEXT。MariaDB 按字符串比较 JSON,结构相等应使用 JSON_EQUALS。
使用方式:按资料中的模式建表、加生成列与索引、用 EXPLAIN 验证索引命中;导入时先入 LONGTEXT 暂存表,用 JSON_VALID 过滤后再写入 JSON 表。
适用场景:JSON 列建模、路径查询与索引、部分更新 API、数组投影为行、导入校验。限制:动态 JSON 键无法高效索引;具体版本支持与行为以 MariaDB KB 为准,资料未提供收费、平台等信息。