云服务器内容精选

  • 字符串函数 表1 字符串函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 BIN() 支持 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 2 CONCAT() 支持 无论参数的数据类型如何,concat返回值的数据类型始终为text;MySQL的concat在含有二进制类型参数时,返回值为二进制类型。 3 CONCAT_WS() 支持 无论参数的数据类型如何,concat_ws返回值的数据类型始终为text;MySQL的concat_ws在含有二进制类型参数时,返回值为二进制类型,其他情况返回值为字符串类型。 4 ELT() 支持 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 函数入参2支持类型存在差异,GaussDB入参2支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned、bigint unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 大对象类型:tinyblob,blob,mediumblob,longblob 日期类型:datetime,timestamp,date,time 5 FIELD() 支持 函数入参为在bigint最大值~ bigint unsigned最大值范围内的数字,存在不兼容。 函数入参为浮点型float(m, d)、double(m, d)、real(m, d)时精度更高,存在不兼容。 6 FIND_IN_SET() 支持 当数据库encoding = 'SQL_ASCII'时,不支持默认的大小写判断规则,即在用户不指定字符集规则的情况下,大写与小写区分判断。 7 INSERT() 支持 Int64类型传参有范围限制,一旦超出-9223372036854775808~9223372036854775807范围会直接报错,MySQL对数值类型传参范围无限制,异常会告警按照上限或下限数值处理。 字符串传参有限制,入参text类型字符串长度最大为2^30-5字节,入参bytea类型字符串长度最大为2^30-512字节。 s1和s2任意参数为bytea类型时,涉及到结果出现非法字符的情况可能展示结果与MySQL有差异但是字符编码与MySQL是一致的。 8 LOCATE() 支持 入参1为bytea类型,入参2为text类型时,GaussDB与MySQL行为存在差异。 9 MAKE_SET() 支持 bits参数为整型时,最大范围支持到int128,低于MySQL范围。 bits参数为日期类型datetime、timestamp、date、time,由于时间类型转整型与MySQL存在差异,目前均未做支持。 bit类型或bool类型由于此类数据类型Gauss与MySQL存在差异,返回结果导致的差异为GaussDB与MySQL固有差异。bits入参为bool类型,str入参为bit类型与bool类型均不做支持。 bits入参为字符串或文本类型时,仅支持纯整型数字形式,其他形式存在差异。且纯整型数字范围限制在bigint范围。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 10 QUOTE() 支持 已知str字符串中含有“\Z”,“\r”,“\%”,“\_”,GaussDB未进行转义,与MySQL存在差异。斜线后跟部分数字也会引起差异,如“\563”。由转义字符引起的本函数与MySQL的差异,此为GaussDB与MySQL的转义字符差异。 str字符串中的“\b”,输出结果表现形式与MySQL有差异。此为GaussDB与MySQL的固有差异 str字符串中含有“\0”时,GaussDB由于UTF-8字符集不识别该字符,输入不成功。此为GaussDB与MySQL的固有差异 str为bit或bool类型时,由于GaussDB与MySQL此类型目前有差异,暂不支持此类类型。 Gauss最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。 str入参整型数值超过正负81个9,返回值与MySQL有差异。 str入参当以科学计数法表示时,GaussDB末尾0值会显示,MySQL不显示,以科学计数法打印,此为固有差异。 11 SPACE() 支持 GaussDB入参1最大支持1073741818,超出返回空字符串。MySQL的入参1默认最大支持4194304,超出告警。 函数入参1支持类型存在差异,GaussDB入参1支持类型如下: 整数类型:tinyint、smallint、mediumint、int、bigint 无符号整数类型:tinyint unsigned、smallint unsigned、int unsigned 字符和文本类型:char,varchar、tinytext,text,mediumtext,longtext,仅支持纯数字整数字符串,且整数范围在bigint范围内。 浮点类型:float、real、double 定点类型:numeric、decimal、dec 布尔类型:bool 12 SUBSTR() 支持 - 13 SUBSTRING() 支持 - 14 SUBSTRING_INDEX() 支持 - 15 STRCMP() 支持 支持入参类型与M存在差异,GaussDB支持类型如下: 字符类型:CHAR、VARCHAR、NVARCHAR2、TEXT 二进制类型:BYTEA 数值类型:TINYING [UNSIGNED]、SMALLINT [UNSIGNED]、INTEGER [UNSIGNED]、BIGINT [UNSIGNED]、FLOAT4、FLOAT8、NUMERIC 日期时间类型:DATE、TIME WITHOUT TIME ZONE、DATETIME、TIMESTAMPTZ 对于数值类型中的浮点类型,由于连接参数设置不同,精度可能与M有差异,不建议使用该场景,或使用NUMERIC类型代替。 16 SHA() / SHA1() 支持 - 17 SHA2() 支持 - 父主题: 系统函数
  • 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数据库 差异 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() 支持 - 父主题: 系统函数
  • REGEXP_INSTR REGEXP_INSTR扩展了INSTR函数的功能,支持搜索字符串的正则表达式模式。DSC可迁移含有2到6个参数的REGEXP_INSTR。 sub_expr参数(参数#7)在Oracle中可用,但不支持迁移。如果输入脚本包含sub_expr,DSC会将其记录为错误。 支持将return_option设为0,不支持其他值。 支持将match_param设为“i”(匹配不区分大小写)和“c”(匹配区分大小写),不支持其他值。 1 2 3 4 5 6 7 8 9 REGEXP_INSTR( string, pattern, [start_position,] [nth_appearance,] [return_option,] [match_param,] [sub_expr] )
  • REGEXP_SUBSTR REGEXP_SUBSTR通过支持搜索字符串的正则表达式模式来扩展SUBSTR函数的功能。可迁移含有2到5个参数的REGEXP_SUBSTR。 sub_expr参数(参数#6)在Oracle中可用,但不支持迁移。如果输入脚本包含sub_expr,则DSC会将其记录为错误。 支持将match_param设为“i”(匹配不区分大小写)和“c”(匹配区分大小写),不支持其他值。 1 2 3 4 5 6 7 8 REGEXP_SUBSTR( string, pattern, [start_position,] [nth_appearance,] [match_param,] [sub_expr] )
  • DBMS_LOB.SUBSTR DBMS_LOB.SUBSTR通过配置参数MigDbmsLob,用户可以指定迁移此函数还是直接保留。 输入:DBMS_LOB.SUBSTR,MigDbmsLob设为true 如果参数MigDbmsLob设为true,则迁移。相反,如果参数MigDbmsLob设为false,则不迁移。 输入 SELECT dbms_lob.substr('!2d3d4dd!',1,5); 输出 If the config param is true, it should be migrated as below: select substr('!2d3d4dd!',5,1); If false, it should be retained as it is: select dbms_lob.substr('!2d3d4dd!',1,5); 输入 SELECT dbms_lob.substr('!2d3d4dd!',5); 输出 If the config param is true, it should be migrated as below: select substr('!2d3d4dd!',1,5); If false, it should be retained as it is: select dbms_lob.substr('!2d3d4dd!',5);
  • DBMS_LOB.CREATETEMPORARY DBMS_LOB.CREATETEMPORARY函数在用户默认的临时表空间中创建一个临时LOB及其对应索引。DBMS_LOB.FREETEMPORARY用于删除临时LOB及其索引。 输入:DBMS_LOB.CREATETEMPORARY和DBMS_LOB.FREETEMPORARY 1 2 3 4 5 6 7 8 DECLARE v_clob clob; BEGIN DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION); v_clob := TO_CLOB('abcddedf'); DBMS_OUTPUT.PUT_LINE(v_clob); DBMS_LOB.FREETEMPORARY(v_clob); end; / 输出 1 2 3 4 5 6 7 8 9 DECLARE v_clob clob; BEGIN -- DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION); v_clob := CAST('abcddedf' AS CLOB); DBMS_OUTPUT.PUT_LINE(CAST(v_clob AS TEXT)); -- DBMS_LOB.FREETEMPORARY(v_clob); NULL; end; /
  • DBMS_LOB.FREETEMPORARY DBMS_LOB.FREETEMPORARY函数释放默认临时表空间中的临时BLOB或CLOB。在调用FREETEMPORARY之后,释放的LOB定位器标记为无效。 输入:DBMS_LOB.CREATETEMPORARY和DBMS_LOB.FREETEMPORARY 1 2 3 4 5 6 7 8 DECLARE v_clob clob; BEGIN DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION); v_clob := TO_CLOB('abcddedf'); DBMS_OUTPUT.PUT_LINE(v_clob); DBMS_LOB.FREETEMPORARY(v_clob); end; / 输出 1 2 3 4 5 6 7 8 9 DECLARE v_clob clob ; BEGIN /*DBMS_LOB.CREATETEMPORARY(v_clob, TRUE, DBMS_LOB.SESSION);*/ v_clob := cast( 'abcddedf' as CLOB ) ; DBMS_OUTPUT.PUT_LINE ( v_clob ) ; /* DBMS_LOB.FREETEMPORARY(v_clob); */ null ; end ; /
  • DBMS_LOB.INSTR DBMS_LOB.INSTR函数从指定的偏移量开始,返回在LOB中第n次匹配模式的位置。 输入:在SQL中使用DBMS_LOB.INSTR 1 2 3 SELECT expr1, …, DBMS_LOB.INSTR(str, septr, 1, 5) FROM tab1 WHERE …; 输出 1 2 3 SELECT expr1, …, INSTR(str, septr, 1, 5) FROM tab1 WHERE … 输入:在PL/SQL中使用DBMS_LOB.INSTR 1 2 3 4 5 6 BEGIN … pos := DBMS_LOB.INSTR(str,septr,1, i); ... END; / 输出 1 2 3 4 5 6 BEGIN … pos := INSTR(str,septr,1, i); ... END; /