JSON函数差异说明:
-
对于JSON函数和其他字符入参函数,如果输入中包含转义字符,默认情况下会与MySQL有一定差异。要实现与MySQL的兼容,需要设置GUC参数standard_conforming_strings取值为off,在这种情况下,转义字符的处理将与MySQL兼容,但是会产生非标准字符输入的warning告警,转义字符\t、\u以及转义数字与MySQL存在差异。JSON_UNQUOTE()函数已经做了兼容处理,即使不设置 GUC 参数,也能与 MySQL 兼容,并且不会产生告警。
-
在处理超长数字(数字的字符长度超过64)时,GaussDB的JSON函数会将数字解析为一个double处理,并使用科学计数法计数。和MySQL的非JSON类型入参相同。但是在JSON类型入参时,由于JSON类型未完全与MySQL兼容,此场景下会产生差异。MySQL会完整显示数字(并且当数字长度超过82时,MySQL会给出错误的结果),GaussDB依然将超长数字解析为一个double精度的值。考虑到超长数字内部都是使用浮点数进行储存,进行运算时无论GaussDB还是MySQL都会有精度丢失,建议您使用字符串来储存超长数字。
gaussdb=# SELECT json_insert('[1, 4, 99999999999999999999999999999999999999999999999999999999999999999999999999]','$[6]',json_insert('[1,4]','$[5]',99999999999999999999999999999999999999999999999999999999999999999999999999)); json_insert ------------------------------ [1, 4, 1e+74, [1, 4, 1e+74]] (1 row)
表1 JSON函数列表
MySQL数据库
GaussDB数据库
差异
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_OBJECT()
支持
-
JSON_QUOTE()
支持
-
JSON_REMOVE()
支持
-
JSON_REPLACE()
支持
-
JSON_SEARCH()
支持,存在差异
返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是JSON。
JSON_SET()
支持
-
JSON_TYPE()
支持
-
JSON_UNQUOTE()
支持
-
JSON_VALID()
支持
-
更多详情请参考GaussDB 文档中心:doc.hcs.huawei.com/db/zh-cn/ga…