MySQL的字符转义

表象

表结构如下:

其中 content 字段存放json之后的数据,这个json数据里面 extra 字段的内容又是一段json,如下:

复制代码
INSERT INTO `future`.`test_escape_character`

( `id`, `title`, `content`, `is_del` )

VALUES
 ( 2, 
 '我的博客',
    '{"web_id":31415,"name":"清澄秋爽","extra":"{\"url\":\"https://dashen.tech\",\"web_icon\":\"https://dashen.tech/favicon.ico\",\"desc\":\"苹果树下思索者\"}","online":1}',
 1 );

写入之后,复制 content 字段,发现extra 无法解析了

而将 content 字段{"web_id":31415,"name":"清澄秋爽","extra":"{\"url\":\"https://dashen.tech\",\"web_icon\":\"https://dashen.tech/favicon.ico\",\"desc\":\"苹果树下思索者\"}","online":1}直接在navicat中写入, 则可成功解析.

对比发现,能成功解析的extra,多了\.(这是json中的json必须要有的,起转义"的作用)

但为何insert进去的数据,就少了这个\?

即我们想要保存的是{"web_id":31415,"name":"清澄秋爽","extra":"{\"url\":\"https://dashen.tech\",\"web_icon\":\"https://dashen.tech/favicon.ico\",\"desc\":\"苹果树下思索者\"}","online":1}, insert写进去之后,却成了

{"web_id":31415,"name":"清澄秋爽","extra":"{"url":"https://dashen.tech","web_icon":"https://dashen.tech/favicon.ico","desc":"苹果树下思索者"}","online":1}

原由

这个问题是因为 MySQL的字符串转义 导致.

MySQL中,特殊字符用 反斜线('\')开始, 从而导致**"url"** 被转义为"url",进而使保存的数据json解析失败.

解决

解决办法也非常简单,将用在转义起始的\也进行转义即可.

MySQL用\\来转义 反斜线('\')字符,即在insert时,将 content 字段改为:

复制代码
'{"web_id":31415,"name":"清澄秋爽","extra":"{\\"url\\":\\"https://dashen.tech\\",\\"web_icon\\":\\"https://dashen.tech/favicon.ico\\",\\"desc\\":\\"苹果树下思索者\\"}","online":1}'

这样写入的数据,就符合预期了~


更多MySQL的转义字符,可参考

MySql字符转义

MySQL中执行sql语句反斜杠需要进行转义否则会被吃掉

本文由mdnice多平台发布

相关推荐
小马爱打代码8 小时前
SpringBoot:封装 starter
java·spring boot·后端
STARSpace88888 小时前
SpringBoot 整合个推推送
java·spring boot·后端·消息推送·个推
Marktowin9 小时前
玩转 ZooKeeper
后端
蓝眸少年CY9 小时前
(第十二篇)spring cloud之Stream消息驱动
后端·spring·spring cloud
码界奇点9 小时前
基于SpringBoot+Vue的前后端分离外卖点单系统设计与实现
vue.js·spring boot·后端·spring·毕业设计·源代码管理
lindd91191110 小时前
4G模块应用,内网穿透,前端网页的制作第七讲(智能头盔数据上传至网页端)
前端·后端·零基础·rt-thread·实时操作系统·项目复刻
Loo国昌11 小时前
【LangChain1.0】第八阶段:文档处理工程(LangChain篇)
人工智能·后端·算法·语言模型·架构·langchain
vx_bisheyuange11 小时前
基于SpringBoot的海鲜市场系统
java·spring boot·后端·毕业设计
李慕婉学姐11 小时前
【开题答辩过程】以《基于Spring Boot和大数据的医院挂号系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
大数据·spring boot·后端
源代码•宸12 小时前
Leetcode—3. 无重复字符的最长子串【中等】
经验分享·后端·算法·leetcode·面试·golang·string