mysql 5.7.8+ 原生支持 json 功能,执行 select json_valid('{"a": 1}'); 返回 1 即表示可用;若报错 function json_valid does not exist,则可能版本过低、误装 mariadb 或使用阉割版二进制。

检查 MySQL 是否已启用 JSON 功能
MySQL 5.7 起原生支持 JSON 类型和相关函数,但前提是编译时启用了 JSON 支持(默认开启),且运行时未被禁用。最直接的验证方式是连上 MySQL 后执行:
SELECT JSON_VALID('{"a": 1}');如果返回 1,说明 JSON 功能可用;若报错 FUNCTION JSON_VALID does not exist,大概率是 MySQL 版本低于 5.7,或使用了极简版/阉割版二进制(如某些 Alpine Linux 上的 mariadb 替代包)。
- 用
SELECT VERSION();确认版本,5.7.8+才有完整 JSON 函数集 - 检查是否误装了
mariadb:MariaDB 的 JSON 函数名、行为与 MySQL 不兼容(例如用JSON_EXTRACT会报错) - 某些 Docker 镜像(如
mysql:5.7官方镜像)默认支持,但自定义构建的镜像可能关闭了WITH_JSON=OFF
确认 JSON 相关函数是否存在
MySQL 5.7+ 提供约 20 个 JSON 函数,不是所有都默认启用。常见缺失函数包括 JSON_TABLE(MySQL 8.0.4+)、JSON_PRETTY(5.7.22+),但基础函数如 JSON_EXTRACT、JSON_SET、JSON_CONTAINS 在 5.7.8+ 全支持。
请注意以下说明:1、本程序允许任何人免费使用。2、本程序采用PHP+MYSQL架构编写。并且经过ZEND加密,所以运行环境需要有ZEND引擎支持。3、需要售后服务的,请与本作者联系,联系方式见下方。4、本程序还可以与您的网站想整合,可以实现用户在线服务功能,可以让客户管理自己的信息,可以查询自己的订单状况。以及返点信息等相关客户利益的信息。这个功能可提高客户的向心度。安装方法:1、解压本系统,放在
- 执行
SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_SCHEMA='mysql' AND ROUTINE_NAME LIKE 'json%';可列出当前可用 JSON 函数 - 若
JSON_EXTRACT都不存在,不是安装问题,而是你根本没在 MySQL 原生环境里——比如连的是 ProxySQL、MaxScale 或旧版中间件,它们可能不透传 JSON 函数 -
JSON_MERGE_PATCH和JSON_MERGE_PRESERVE行为差异大,误用会导致数据覆盖,不是安装问题,但常被当成“JSON 不工作”
常见报错及真实原因
看到 ERROR 3141 (22032): Invalid JSON text 或 Invalid JSON path expression 时,90% 不是 JSON 支持没装好,而是输入格式或路径写错了。
-
JSON_EXTRACT(col, '$.name')中路径必须用单引号包裹,双引号会报语法错误 - 插入含中文的 JSON 字符串时,客户端连接字符集不是
utf8mb4会导致Invalid JSON text—— 检查character_set_client和表字段的COLLATE - 用
LOAD_FILE()读取 JSON 文件再插入?确保文件路径在 MySQL 服务端可读,且开启了secure_file_priv白名单
不需要“安装”,但要避开几个典型陷阱
JSON 支持是 MySQL 内置能力,不是插件,不能通过 INSTALL PLUGIN 加载,也不需要额外扩展包。所谓“安装 JSON 支持”本质是确认环境正确、避免误操作。
- 别在配置文件里加
plugin-load=json.so—— 这是无效甚至导致启动失败的 - 别尝试用
apt install mysql-server-json或类似包名 —— 主流发行版没有这种独立包 - 升级 MySQL 时若从 5.6 直升 5.7,需运行
mysql_upgrade,否则系统表缺失会导致部分 JSON 函数不可用
真正卡住人的,往往不是 JSON 本身,而是字段定义用 TEXT 存 JSON 字符串却想用 JSON_CONTAINS —— 必须是 JSON 类型字段才能触发类型校验和索引优化。









