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

字符串函数

表1 字符串函数列表

序号

MySQL数据库

GaussDB数据库

差异

1

ASCII()

支持。

-

2

BIT_LENGTH()

支持。

-

3

CHAR_LENGTH()

支持,有差异。

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

4

CHARACTER_LENGTH()

支持,有差异。

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

5

CONCAT()

支持。

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

6

CONCAT_WS()

支持。

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

7

HEX()

支持。

-

8

LENGTH()

支持。

-

9

LPAD()

支持,有差异。

  • MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为'GBK'时,GaussDB默认最大长度为2097152。
  • 如果数据库字符集是SQL_ASCII,可能产生未预期的结果。
  • 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

10

MD5()

支持,有差异。

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

11

RANDOM_BYTES()

支持。

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

12

REPEAT()

支持。

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

13

REPLACE()

支持。

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

14

RPAD()

支持,有差异。

  • MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为'GBK'时,GaussDB默认最大长度为2097152。
  • 如果数据库字符集是SQL_ASCII,可能产生未预期的结果。
  • 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为BLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。

15

SHA()/SHA1()

支持。

-

16

SHA2()

支持。

-

17

SPACE()

支持。

-

18

STRCMP()

支持,有差异。

如果数据库字符集是SQL_ASCII,可能产生未预期的结果。

19

FIND_IN_SET()

支持,有差异。

当指定数据库使用的字符编码是SQL_ASCII时,服务器把字节值0~127根据ASCII标准解释,而字节值128~255则当作无法解析的字符;如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助你转换或者校验非ASCII字符。

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

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

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

SUBSTRING_INDEX函数存在差异:

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

20

LCASE()

21

LEFT()

22

LOWER()

23

LTRIM()

24

REVERSE()

25

RIGHT()

26

RTRIM()

27

SUBSTR()

28

SUBSTRING()

29

SUBSTRING_INDEX()

30

TRIM()

31

UCASE()

32

UPPER()

33

UNHEX()

支持。

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

34

FIELD()

支持。

-

35

COMPRESS()

支持,有差异。

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

36

UNCOMPRESS()

支持。

-

37

UNCOMPRESS_LENGTH()

支持。

-

38

EXPORT_SET()

支持。

-

39

POSITION()

支持。

-

40

LOCATE()

支持。

-

41

CHAR()

支持,有差异。

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

42

ELT()

支持,有差异。

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

43

FORMAT()

支持。

-

44

BIN()

支持。

-

45

MAKE_SET()

支持。

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

46

TO_BASE64()

支持。

-

47

FROM_BASE64()

支持。

-

48

ORD()

支持。

-

49

MID()

支持。

-

50

QUOTE()

支持,有差异。

  1. 在M-Compatibility兼容模式下,开启MySQL转义:
    SET m_format_behavior_compat_options=enable_escape_string;
  2. 当入参字符串中含“\0”时,GaussDB中由于字符集不支持导致无法输入。由转义字符导致的本函数与MySQL的差异,与本函数无关。
  3. GaussDB最大支持1GB数据传输,str入参长度最大支持536870908,函数返回结果字符串最大支持1GB。
  4. 入参为固定长度BINARY类型时,对于未填充字符:MySQL默认补充空字符“\0”,GaussDB默认补充空格。
  5. 在MySQL中,QUOTE()会处理空字符,GaussDB中,QUOTE()无法处理空字符。

51

INSERT()

支持。

-

52

INSTR()

支持。

-