
# JSON函数
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)
  ```
  
表1JSON函数列表 
| MySQL数据库             | GaussDB数据库 | 差异                                                   |
|:---|:---|:---|
| JSON_APPEND()        | 支持         | -                                                    |
| JSON_ARRAY()         | 支持         | -                                                    |
| JSON_ARRAY_APPEND()  | 支持         | -                                                    |
| JSON_ARRAY_INSERT()  | 支持         | -                                                    |
| JSON_CONTAINS()      | 支持         | -                                                    |
| JSON_CONTAINS_PATH() | 支持         | -                                                    |
| JSON_DEPTH()         | 支持，存在差异    | 返回值与MySQL有差异，GaussDB返回的是int，MySQL返回的是bigint。         |
| JSON_EXTRACT()       | 支持         | -                                                    |
| JSON_INSERT()        | 支持         | -                                                    |
| JSON_KEYS()          | 支持         | -                                                    |
| JSON_LENGTH()        | 支持，存在差异    | 返回值与MySQL有差异，GaussDB返回的是int，MySQL返回的是bigint。         |
| JSON_MERGE()         | 支持         | -                                                    |
| JSON_OBJECT()        | 支持         | -                                                    |
| JSON_QUOTE()         | 支持，存在差异    | 返回值与MySQL有差异，GaussDB返回的是JSON，MySQL返回的是varchar或者text。 |
| JSON_REMOVE()        | 支持         | -                                                    |
| JSON_REPLACE()       | 支持         | -                                                    |
| JSON_SEARCH()        | 支持，存在差异    | 返回值与MySQL有差异，GaussDB返回的是text，MySQL返回的是JSON。          |
| JSON_SET()           | 支持         | -                                                    |
| JSON_TYPE()          | 支持，存在差异    | 数值类型的JSON值统一识别为number，与MySQL有差异。                     |
| JSON_UNQUOTE()       | 支持         | -                                                    |
| JSON_VALID()         | 支持         | -                                                    |
   
