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

MySQL插入转义双引号被自动删除,无法正常存储JSON如何解决

问题根本原因

你遇到的转义符丢失是两层转义规则叠加导致的:

  • 第一层是MySQL的字符串字面量解析规则,会先吃掉一层反斜杠转义
  • 第二层是JSON本身的字符串转义规则,要求字符串内的双引号必须加反斜杠转义

你原来写的\"只会被MySQL的字符串解析层识别为普通双引号,透传给JSON引擎时已经没有反斜杠,自然会导致JSON语法错误。


解决方案

方案1:手动加两层转义

如果要手动写SQL拼接JSON字符串,需要给需要转义的双引号加两层反斜杠,也就是把\"替换为\\",示例如下:

INSERT into JSON_VALUES SET
ID = 150,
RESULT = '[{"ID":"150","VALUE":"THIS IS A \\"TEST\\" THAT IS IGNORED","DATE":"2021-08-26"}]'

此时MySQL解析字符串时会把\\"转换为\",正好符合JSON的转义要求。

方案2:使用MySQL内置JSON函数构造内容(最推荐)

不需要手动处理任何转义,直接用JSON_ARRAY、JSON_OBJECT函数构造JSON结构,MySQL会自动处理所有转义逻辑,示例如下:

INSERT into JSON_VALUES SET
ID = 150,
RESULT = JSON_ARRAY(
  JSON_OBJECT(
    'ID', '150',
    'VALUE', 'THIS IS A "TEST" THAT IS IGNORED',
    'DATE', '2021-08-26'
  )
);

这个方案完全避免了手动写转义符的出错概率,也不需要记忆多层转义规则。

方案3:代码操作时使用参数化查询

如果你是通过业务代码操作数据库,不要手动拼接SQL字符串,一律使用对应语言的参数化查询功能,数据库驱动会自动处理所有转义逻辑,不会出现转义符丢失的问题。


验证方式

插入完成后可以用JSON_VALID函数校验存储的JSON是否合法:

SELECT JSON_VALID(RESULT) FROM JSON_VALUES WHERE ID = 150;

返回1说明JSON格式合法,可正常读取解析。


内容的提问来源于stack exchange,提问作者Eduardo Ponce de Leon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:09:01