Mysql
將轉義的雙引號插入 MySQL JSON 欄位
我正在嘗試插入一個字元串化的 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 文件團隊討論在這裡添加一些範例和解釋: