更新时间:2024-11-26 GMT+08:00
分享

JSON函数

JSON函数差异说明:

  • 对于JSON函数和其他字符入参函数来说,如果含有转义字符的输入,默认情况下会与MySQL有一定差异,需要设置GUC参数set 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()

支持

-

相关文档