字符串函数
当GaussDB使用的字符编码是SQL_ASCII时,服务器会根据ASCII标准对字节值0~127进行解释,而字节值128~255则当作无法解析的字符。如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助用户转换或者校验非ASCII字符,从而与MySQL的行为产生较大差异。
|
函数名 |
与MySQL的差异 |
|---|---|
|
ASCII() |
- |
|
BIT_LENGTH() |
- |
|
CHAR_LENGTH() |
如果数据库字符集是SQL_ASCII,该函数会返回字节数而非字符数。 |
|
CHARACTER_LENGTH() |
|
|
CONCAT() |
- |
|
CONCAT_WS() |
- |
|
HEX() |
- |
|
LENGTH() |
- |
|
LPAD() |
MySQL默认最大填充长度为1398101,GaussDB默认最大长度为1048576。在不同字符集下,最大填充长度会有差异,例如字符集为GBK时,GaussDB默认最大长度为2097152。 |
|
RPAD() |
|
|
MD5() |
当BINARY类型插入字符串长度小于目标长度时,GaussDB填充符和MySQL不同;因此导致入参为BINARY类型时,函数结果和MySQL不一致。 |
|
RANDOM_BYTES() |
GaussDB与MySQL都使用OPENSSL生成随机字符串。GaussDB使用OPENSSL3.x.x生成随机字符串,与使用OPENSSL1.x.x版本的MySQL相比性能可能存在劣化。 |
|
REPEAT() |
- |
|
REPLACE() |
当第三个入参为null,且第二个入参的字符串长度不为0时,GaussDB返回NULL,MySQL可能返回第一个参数的字符。例如: -- GaussDB的行为:
m_db=# select replace('1.23', binary(1.1), null);
replace
---------
(1 row)
-- MySQL的行为:
mysql> select replace('1.23', binary(1.1), null);
+------------------------------------+
| replace('1.23', binary(1.1), null) |
+------------------------------------+
| 1.23 |
+------------------------------------+
1 row in set (0.00 sec) |
|
SHA()/SHA1() |
- |
|
SHA2() |
- |
|
SPACE() |
- |
|
STRCMP() |
- |
|
FIND_IN_SET() |
- |
|
LCASE() |
- |
|
LEFT() |
- |
|
LOWER() |
- |
|
LTRIM() |
- |
|
REVERSE() |
- |
|
RIGHT() |
- |
|
RTRIM() |
- |
|
SUBSTR() |
第一个入参节点返回的字符序为BINARY时,MySQL可能依旧以不同的字符序逻辑处理(取决于内层嵌套的函数),而GaussDB以BINARY字符序进行函数处理,导致截取的字节长度不同。 |
|
SUBSTRING() |
|
|
SUBSTRING_INDEX() |
|
|
TRIM() |
- |
|
UCASE() |
- |
|
UPPER() |
- |
|
UNHEX() |
- |
|
FIELD() |
- |
|
COMPRESS() |
- |
|
UNCOMPRESS() |
- |
|
UNCOMPRESS_LENGTH() |
- |
|
EXPORT_SET() |
- |
|
POSITION() |
- |
|
LOCATE() |
- |
|
CHAR() |
|
|
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() |
|
|
INSERT() |
- |
|
INSTR() |
- |
|
OCTET_LENGTH() |
- |