MySQL中如何将表所有字段自动传入JSON_OBJECT生成JSON对象
版本适配解决方案
1. MySQL 8.0.19及以上版本(原生支持)
该版本开始官方已经内置了整字段转JSON的语法,直接在JSON_OBJECT中传入*即可自动将所有字段名作为键、对应字段值作为值生成JSON对象,无需手动枚举:
-- 单表场景 SELECT JSON_OBJECT(*) FROM table1; -- 多表关联场景,指定表别名避免字段冲突 SELECT JSON_OBJECT(t1.*) AS table1_json, JSON_OBJECT(t2.*) AS table2_json FROM table1 t1 INNER JOIN table2 t2 ON t1.id = t2.relation_id;
该方式无额外性能开销,和手动枚举字段的运行效果完全一致。
2. 低于8.0.19的低版本MySQL
可以通过查询系统表动态生成JSON_OBJECT所需的参数,避免手动输入:
- 先临时调整分组拼接长度限制,避免字段过多时结果截断:
SET SESSION group_concat_max_len = 1000000;
- 执行语句生成参数串,替换语句中的
你的库名、你的表名:
SELECT GROUP_CONCAT('"', COLUMN_NAME, '", ', COLUMN_NAME) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = '你的库名' AND TABLE_NAME = '你的表名';
- 把查询得到的字符串复制粘贴到
JSON_OBJECT()的括号中即可直接使用。
如果需要高频使用该能力,可以把上述逻辑封装为存储过程,传入库名、表名即可直接返回拼接完成的查询语句。
提示:如果存在敏感字段不需要返回,生成参数后可手动删除对应字段的配置,避免数据泄露。
内容的提问来源于stack exchange,提问作者Luxior
相关产品推荐
相关产品推荐

