更新时间:2024-12-06 GMT+08:00

字符串函数

表1 字符串函数列表

MySQL数据库

GaussDB数据库

差异

ASCII()

支持

-

BIT_LENGTH()

支持

-

CHAR_LENGTH()

支持,存在差异

GaussDB此函数如果数据库字符集是SQL_ASCII,CHAR_LENGTH()会返回字节数而非字符数。

CHARACTER_LENGTH()

支持,存在差异

GaussDB此函数如果数据库字符集是SQL_ASCII,CHARACTER_LENGTH()会返回字节数而非字符数。

CONCAT()

支持,存在差异

当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

CONCAT_WS()

支持,存在差异

当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

HEX()

支持

-

LENGTH()

支持

-

LPAD()

支持,存在差异

  • MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为GBK时,GaussDB默认最大长度为2097152。
  • 当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。
  • 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

MD5()

支持,存在差异

当BINARY类型插入字符串长度小于目标长度时,GaussDB填充符和MySQL不同;因此导致入参为BINARY类型时,函数结果和MySQL不一致。

RANDOM_BYTES()

支持,存在差异

GaussDB与MySQL都使用OPENSSL生成随机字符串。GaussDB使用OPENSSL3.x.x生成随机字符串,与使用OPENSSL1.x.x版本的MySQL相比性能可能存在劣化。

REPEAT()

支持,存在差异

当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

REPLACE()

支持,存在差异

  • 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。
  • 当第三个入参为null,且第二个入参的字符串长度不为0时,GaussDB返回NULL,MySQL可能返回第一个参数的字符。

RPAD()

支持,存在差异

  • MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为GBK时,GaussDB默认最大长度为2097152。
  • 当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。
  • 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

SHA()/SHA1()

支持

-

SHA2()

支持

-

SPACE()

支持

-

STRCMP()

支持,存在差异

当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。

FIND_IN_SET()

支持,存在差异

当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。

当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

SUBSTRING 函数在第一个入参为嵌套场景下与MySQL存在差异:

  • 第一个入参节点返回的字符序为BINARY时,MySQL可能依旧以不同的字符序逻辑处理(取决于内层嵌套的函数),而GaussDB以BINARY字符序进行函数处理,导致截取的字节长度不同。

SUBSTRING_INDEX函数存在差异:

  • 在第三个入参为负数时,MySQL与GaussDB的比较逻辑不同,会导致结果可能存在差异。
  • 当第三个入参为正数时,由于MySQL 5.7以int32位存储,会存在回绕问题导致结果不正确。MySQL 8.0修复了该问题以int64为存储,GaussDB以8.0为准。当入参值超过2^63 -1时,也会发生回绕,可能导致第三个参数获取为负数,结果存在差异。

LCASE()

LEFT()

LOWER()

LTRIM()

REVERSE()

RIGHT()

RTRIM()

SUBSTR()

SUBSTRING()

SUBSTRING_INDEX()

TRIM()

UCASE()

UPPER()

UNHEX()

支持,存在差异

MySQL的返回值类型为BINARY、VARBINARY、BLOB、MEDIUMBLOB或LONGBLOB;GaussDB返回值类型固定为LONGBLOB。

FIELD()

支持

-

COMPRESS()

支持,存在差异

MySQL返回类型为VARBINARY、BLOB或LONGBLOB;GaussDB返回二进制字符串类型LONGBLOB。

UNCOMPRESS()

支持

-

UNCOMPRESS_LENGTH()

支持

-

EXPORT_SET()

支持

-

POSITION()

支持

-

LOCATE()

支持

-

CHAR()

支持,存在差异

  • CHAR函数指定字符集时,若转码失败,GaussDB产生报错,MySQL提示WARNING并返回NULL。
  • MySQL在参数为ASCII表中第0~31个和127个码值时,返回结果不可见,GaussDB会以\x01、\x02等16进制返回。
  • MySQL中CHAR函数入参个数无限制,GaussDB函数的入参不超过8192个。

ELT()

支持,存在差异

MySQL中ELT函数入参个数无限制,GaussDB函数的入参不超过8192个。

FORMAT()

支持

-

BIN()

支持

-

MAKE_SET()

支持,存在差异

MySQL 5.7版本,当MAKE_SET函数选中的第一个参数为整型、浮点型或定点型且返回结果中存在非ASCII字符,显示结果可能为乱码;GaussDB显示结果正常,和MySQL 8.0版本保持一致。

TO_BASE64()

支持

-

FROM_BASE64()

支持

-

ORD()

支持

-

MID()

支持

-

QUOTE()

支持,存在差异

  • 当入参字符串中含“\0”时,GaussDB中由于字符集不支持导致无法输入。由转义字符导致的本函数与MySQL的差异,与本函数无关。
  • GaussDB最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。
  • 入参为固定长度BINARY类型时,对于未填充字符:MySQL默认补充空字符“\0”,GaussDB默认补充空格。
  • 在MySQL中,QUOTE()会处理空字符,GaussDB中,QUOTE()无法处理空字符。

INSERT()

支持

-

INSTR()

支持

-