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)
序号 |
MySQL数据库 |
GaussDB数据库 |
差异 |
---|---|---|---|
1 |
JSON_APPEND() |
支持 |
- |
2 |
JSON_ARRAY() |
支持 |
- |
3 |
JSON_ARRAY_APPEND() |
支持 |
- |
4 |
JSON_ARRAY_INSERT() |
支持 |
- |
5 |
JSON_CONTAINS() |
支持 |
- |
6 |
JSON_CONTAINS_PATH() |
支持 |
- |
7 |
JSON_DEPTH() |
支持 |
返回值与MySQL有差异,GaussDB返回的是int,MySQL返回的是bigint。 |
8 |
JSON_EXTRACT() |
支持 |
- |
9 |
JSON_INSERT() |
支持 |
- |
10 |
JSON_KEYS() |
支持 |
- |
11 |
JSON_LENGTH() |
支持 |
返回值与MySQL有差异,GaussDB返回的是int,MySQL返回的是bigint。 |
12 |
JSON_MERGE() |
支持 |
- |
13 |
JSON_OBJECT() |
支持 |
- |
14 |
JSON_QUOTE() |
支持 |
返回值与MySQL有差异,GaussDB返回的是json,MySQL返回的是varchar或者text。 |
15 |
JSON_REMOVE() |
支持 |
- |
16 |
JSON_REPLACE() |
支持 |
- |
17 |
JSON_SEARCH() |
支持 |
返回值与MySQL有差异,GaussDB返回的是text,MySQL返回的是json。 |
18 |
JSON_SET() |
支持 |
- |
19 |
JSON_TYPE() |
支持 |
数值类型的json值统一识别为number,与MySQL有差异。 |
20 |
JSON_UNQUOTE() |
支持 |
- |
21 |
JSON_VALID() |
支持 |
- |