Mysql

將轉義的雙引號插入 MySQL JSON 欄位

  • January 3, 2017

我正在嘗試插入一個字元串化的 JSON,如下所示:

'{"test": "string with \"escaped quotes\" does not work"}'

進入 MySQL JSON 欄位,但我總是收到錯誤:

SQL 錯誤 (3140):無效的 JSON 文本:“在對象成員之後缺少逗號或 ‘}’。”

在值(或列)中的位置 24 ‘{“test”: “string with “escaped quotes” doesn’t work”}’。

知道可能導致問題的原因嗎?

完整的INSERT聲明是:

INSERT INTO test(json_test)
VALUES ('{"test": "string with \"escaped quotes\" does not work"}');

讓我們創建表:

mysql> create table jsontest (id serial, value json);
Query OK, 0 rows affected (0.02 sec)

mysql> show create table jsontest\G
*************************** 1. row ***************************
Table: jsontest
Create Table: CREATE TABLE `jsontest` (
 `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
 `value` json DEFAULT NULL,
 UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

並插入一些 JSON 數據/對象:

mysql> INSERT INTO jsontest(value) VALUES (JSON_OBJECT('test', 'string with "escaped quotes" does not work'));
Query OK, 1 row affected (0.01 sec)

mysql> INSERT INTO jsontest(value) VALUES ('{"test": "string with \\"escaped quotes\\" does not work"}');
Query OK, 1 row affected (0.01 sec)

mysql> select id, value->>"$.test" from jsontest;
+----+--------------------------------------------+
| id | value->>"$.test"                           |
+----+--------------------------------------------+
|  2 | string with "escaped quotes" does not work |
|  9 | string with "escaped quotes" does not work |
+----+--------------------------------------------+
2 rows in set (0.00 sec)

正如您在此處看到的,您必須使用雙反斜杠轉義序列,因為您不希望 SQL 解析器執行標準轉義序列處理,而是希望將包含轉義序列的文字字元串向下傳遞給儲存引擎JSON數據類型處理。

我將與 MySQL 文件團隊討論在這裡添加一些範例和解釋:

12.6 JSON 數據類型 - 創建 JSON 值

引用自:https://dba.stackexchange.com/questions/159675