关于后端:MySQL的字符转义

<font color=”orange”>表象</font>

表构造如下:

其中 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}

<font color=”orange”>原由</font>

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

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

<font color=”orange”>解决</font>

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

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多平台公布

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理