当前位置: 首页 > 知识库问答 >
问题:

MySQL解析上面的字符\u0080

许远航
2023-03-14

我不明白这种行为,我希望有人能启发我。。。

mysql> CREATE TABLE test (id INT AUTO_INCREMENT, data JSON, PRIMARY KEY(id));
Query OK, 0 rows affected (0.03 sec)

mysql> INSERT INTO test(data) VALUES ('["\\u0000\"]'), ('["\\u0001"]'), ('["\\u0081"]'), ('["\\u0091"]');
Query OK, 4 rows affected (0.09 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select *,char_length(data),hex(data) from test;
+----+------------+-------------------+----------------------+
| id | data       | char_length(data) | hex(data)            |
+----+------------+-------------------+----------------------+
|  1 | ["\u0000"] |                10 | 5B225C7530303030225D |
|  2 | ["\u0001"] |                10 | 5B225C7530303031225D |
|  3 | [""]      |                 5 | 5B22C281225D         |
|  4 | [""]      |                 5 | 5B22C291225D         |
+----+------------+-------------------+----------------------+
4 rows in set (0.00 sec)

为什么MySQL选择将\\u0081解析为代码点,而将\\u0001保留为一系列简单字符?

或者采取另一种方式,为什么MySQL在后一种情况下将“\\”解析为“这是一个字面上的反斜杠字符”,但在前一种情况下将“\\”解析为解释以下字符的理由?我可以看到两种方法的论点,但我对u0001和u0081之间的行为变化感到困惑。

这是在“mysql版本14.14发行版5.7.22,用于Linux(x86_64),使用EditLine包装器”以及“mysql版本8.0.12,用于x86_64上的macos10.13(mysql社区服务器-GPL)”上。它显示在MySQL命令行上,如图所示,也可以通过PDO显示。

和往常一样,如果这个问题在别处被提及,我深表歉意。我发现了许多相关问题,但没有一个解决了这种不一致性(或者对于Bug 87722,它声称已经修复,但似乎没有)。

共有1个答案

邹晟睿
2023-03-14

由于这里有两层转义,SQL和JSON,您实际上需要加倍使用反斜杠才能工作:

INSERT INTO test(data) VALUES ('["\\\\u0000\"]'), ('["\\\\u0001"]'), ('["\\\\u0081"]'), ('["\\\\u0091"]');

请注意,如果这些是简单的VARCHAR字段,则不需要这样做。JSON将\视为特殊字符。

 类似资料:
  • Milo Yip 2016/9/27 本文是《从零开始的 JSON 库教程》的第三个单元解答编。解答代码位于 json-tutorial/tutorial03_answer。 1. 访问的单元测试 在编写单元测试时,我们故意先把值设为字符串,那么做可以测试设置其他类型时,有没有调用 lept_free() 去释放内存。 static void test_access_boolean() {

  • 问题内容: Java EE具有ServletRequest.getParameterValues()。 在非EE平台上,URL.getQuery()仅返回一个字符串。 当不在 Java EE上时,正常解析URL中的查询字符串的正常方法是什么? < rant > 尝试创建自己的解析器的答案很流行。这是一个非常有趣且令人兴奋的微编码项目,但我不能说这是一个好主意 :( 以下代码片段通常有缺陷或损坏,顺

  • 我有一个输入表单,允许某人键入unicode字符。所以它可能是类似于“嘿,uF32A怎么了?如果我得到这个字符串,它将有一个子字符串“\uF32A”,我如何将其转换为字符“\uF32A”?

  • 问题内容: 好的,现在我可以解析空间了,这是我以前的问题。现在我的解析器几乎可以使用了,但是有一个我无法弄清的缺陷。 我能够在段(参见代码)和管道之间的数据之后检索数据。我无法到达的是一个级别并检索包含在管道之间并以^分隔的数据。 例如。 但是,我当前的输出将是 我收到@后面带有各种ID的异常1 [Ljava.lang.String; @ 1786e64 下面给出的注释代码造成了问题。 码: 请指

  • 问题内容: 我有以下Json字符串 我正在尝试解析它并打印出每个名称和值-最简单的方法是什么?我尝试了jQuery.parseJSON但我不知道如何使用它 示例代码会很棒 问题答案: 结果是: jsFiddle示例:http://jsfiddle.net/bradchristie/XtzjZ/1/

  • 主要内容:Jsoup 解析字符串 语法,Jsoup 解析字符串 说明,Jsoup 解析字符串 示例以下示例将展示将 HTML 字符串解析为 Document 对象。 Jsoup 解析字符串 语法 document : 文档对象代表 HTML DOM。 Jsoup : 解析给定 HTML 字符串的主类。 html : HTML 字符串。 Jsoup 解析字符串 说明 parse(String html) 方法将输入的 HTML 解析为一个新的 Document。该文档对象可用于遍历和获取 htm