mysql - \n 不能发布到 MYSQL 服务器
问题描述
我正在尝试获取、发布 JSON 数据并将其放入使用 utf8 作为字符集的 MYSQL 服务器(docker 容器)。在此 JSON 数据中是应包含“\n”的字符串。当在我的应用程序中应用数据时,这些“\n”会导致换行符,这正是我想要的。
但是,当我尝试将其插入我的数据库时,它会引发错误:“第 x 行的错误 3140 (22032):“无效的 JSON 文本:“字符串中的无效编码。”。
我发现的解决方案建议添加额外的反斜杠(“'\'\n”)。虽然这适用于插入,但它不允许在我的应用程序中使用我想要的换行符。有没有办法在不改变应用程序的情况下解决?
SQL查询:
INSERT INTO table (id, json) VALUES (1,'{"data": "name: ab \n cost: 5 $ | time: 1 s"}')
解决方案
INSERT INTO table (id, json) VALUES (1,'{"data": "name: ab \n cost: 5 $ | time: 1 s"}')
\n
是 SQL 中的转义序列,因此您发送的是实际的回车符,而不是后跟字母 n 的反斜杠,这是 JSON 所要求的。这个其他查询更明显:
mysql> select '{"data": "name: ab \n cost: 5 $ | time: 1 s"}' as test;
+----------------------------------------------+
| test |
+----------------------------------------------+
| {"data": "name: ab
cost: 5 $ | time: 1 s"} |
+----------------------------------------------+
1 row in set (0.00 sec)
要在 MySQL 中插入文字\
,您需要使用另一个转义\
:
mysql> select 'one\\ntwo' as test;
+----------+
| test |
+----------+
| one\ntwo |
+----------+
1 row in set (0.00 sec)
请注意,这仅是您在代码中键入文字字符串时出现的问题。它不会影响来自其他来源的数据(例如 HTML 表单或数据库),除非您无法在某处处理它(例如通过将其注入原始 SQL 而不是使用准备好的语句)。
推荐阅读
- javascript - node js中的全局环境行为
- python - Django 在 MYSQL Db 中建模时间戳
- javascript - Vuejs在对象数组中搜索
- php - 我的访客会话计数器不起作用
- html - html/css 中的全屏宽度标题
- arrays - 如何从每个excel单元格复制到剪贴板并粘贴到应用程序
- javascript - 如何在 React Native 中使用 HoC
- r - 如何将列中的重复值加在一起?
- javascript - 如何在 exp.com/sec1 而不是 exp.com/#sec1 之类的 url 中制作没有 # 的一页网站
- keras - Tensorflow 2.0 Keras BatchNorm:如何更新自定义训练中的在线参数?