更新时间:2026-05-16 GMT+08:00
分享

JSON函数

JSON函数差异说明:对于JSON函数和其他字符入参函数,如果输入中包含转义字符,默认情况下会与MySQL有一定差异。要实现与MySQL的兼容,需要设置GUC参数standard_conforming_strings取值为off,在这种情况下,转义字符的处理将与MySQL兼容,但是使用转义字符\f、\Z、\0和\uxxxx的场景会与MySQL存在差异。

表1 JSON函数列表

函数名

与MySQL的差异

JSON_APPEND()

-

JSON_ARRAY()

-

JSON_ARRAY_APPEND()

-

JSON_ARRAY_INSERT()

-

JSON_CONTAINS()

-

JSON_CONTAINS_PATH()

-

JSON_DEPTH()

-

JSON_EXTRACT()

-

JSON_INSERT()

-

JSON_KEYS()

-

JSON_LENGTH()

-

JSON_MERGE()

-

JSON_MERGE_PATCH()

-

JSON_MERGE_PRESERVE()

-

JSON_OBJECT()

-

JSON_QUOTE()

-

JSON_REMOVE()

-

JSON_REPLACE()

-

JSON_SEARCH()

-

JSON_SET()

-

JSON_TYPE()

-

JSON_UNQUOTE()

在转义字符中\0和\uxxxx的场景与MySQL有差异:

SELECT json_unquote('"\0"');

mysql> SELECT json_unquote('"\0"');
ERROR 3141 (22032): Invalid JSON text in argument 1 to function json_unquote: "Missing a closing quotation mark in string." at position 1.

m_db=# SELECT json_unquote('"\0"');
ERROR:  invalid byte sequence for encoding "UTF8": 0x00
SELECT json_unquote('"\\u4656"');

mysql> SELECT json_unquote('"\\u4656"');
+---------------------------+
| json_unquote('"\\u4656"') |
+---------------------------+
| 䙖                        |
+---------------------------+
1 row in set (0.00 sec)

m_db=# SELECT json_unquote('"\\u4656"');
json_unquote
--------------
u4656
(1 row)

JSON_VALID()

-

相关文档