MariaDB插入含JSON结构的HERE字段报错,求正确INSERT语句
解决MariaDB中JSON格式数据插入HERE字段的问题
你的HERE字段类型为longtext,要插入嵌套JSON对象时,核心是要让插入的JSON内容符合SQL字符串语法,或者利用MariaDB的JSON工具函数来生成合法数据,以下是两种可行的INSERT语句写法:
方法1:直接插入转义后的JSON字符串
SQL中字符串用单引号包裹,因此需要将JSON对象里的双引号保留,整体用单引号包裹即可(如果JSON内有单引号,需转成两个单引号''):
INSERT INTO xx (id, xx, HERE, xxxxxx, xxxxxx, xxxx, attr) VALUES ( 1, 'string', '{"1":"string","2":"string"}', -- 替换为对应字段的实际值,比如tinyint字段填1或0,长文本字段填对应字符串 1, '示例长文本内容', '另一长文本内容', 'attr字段的内容' );
方法2:用MariaDB JSON函数生成合法内容
如果你的MariaDB版本是10.2及以上(支持JSON功能),可以用JSON_OBJECT函数自动构造JSON对象,无需手动处理引号转义:
INSERT INTO xx (id, xx, HERE, xxxxxx, xxxxxx, xxxx, attr) VALUES ( 1, 'string', JSON_OBJECT('1', 'string', '2', 'string'), 1, '示例长文本内容', '另一长文本内容', 'attr字段的内容' );
额外注意事项
- 若后续需要频繁操作HERE字段的JSON内容,建议把该字段类型改为
JSON(MariaDB 10.2+支持),这样可以用JSON_EXTRACT、JSON_SET等函数更便捷地查询、修改JSON数据。 - 之前的报错大概率是因为JSON字符串格式不合法(比如引号未正确包裹、转义错误),或者直接传入了未转成字符串的JSON对象导致SQL解析失败。
内容的提问来源于stack exchange,提问作者MariaOverflow
相关产品推荐
相关产品推荐

