You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL JSON字段更新后格式不符致脚本报错求助

解决MySQL JSON列新旧值格式不一致问题

问题原因

你的JSON列中原有数据并非直接存储JSON对象,而是将JSON字符串进行二次转义后以JSON字符串类型存储(即列内实际是带外层双引号、内部引号转义的字符串值,而非原生JSON对象)。虽然列类型定义为JSON,但MySQL允许存储字符串类型的JSON值,这就导致你直接存入原生JSON对象时,格式和原有数据完全不同,触发脚本报错。

解决方案

使用MySQL内置的JSON_QUOTE()函数,将你要存入的JSON对象字符串转换为带外层双引号、内部引号自动转义的格式,和原有数据保持一致。

修正后的UPDATE语句

UPDATE case_inputs 
SET data = JSON_QUOTE('{"inv_start_time": "2022-02-01 00:00:00", ...}')
WHERE case_id = 45 AND data_type = 1;

验证方法

执行以下语句查看数据类型,确认原有数据和新数据的类型统一:

SELECT data, JSON_TYPE(data) FROM case_inputs WHERE case_id = 45 AND data_type = 1;

原有数据的JSON_TYPE结果应为STRING,使用JSON_QUOTE()更新后,新数据的JSON_TYPE也会是STRING,格式完全匹配原有数据。

补充说明

如果后续希望将所有数据统一为原生JSON对象格式(更符合JSON列的设计初衷),可以批量更新原有数据:

UPDATE case_inputs 
SET data = JSON_UNQUOTE(data)
WHERE JSON_TYPE(data) = 'STRING';

这条语句会将存储为字符串的JSON值转换为原生JSON对象,之后更新时直接存入JSON对象字符串即可。

内容的提问来源于stack exchange,提问作者rhedak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:23:25