
# 字符串函数
当GaussDB使用的字符编码是 SQL_ASCII 时，服务器会根据ASCII标准对字节值0\~127进行解释，而字节值128\~255则当作无法解析的字符。如果该函数的输入输出包含了任何非 ASCII 数据，数据库将无法帮助用户转换或者校验 非ASCII 字符，从而与MySQL的行为产生较大差异。
表1字符串函数列表 
| 函数名                 | 与MySQL的差异                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
|:---|:---|
| ASCII()             | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| BIT_LENGTH()        | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| CHAR_LENGTH()       | 如果数据库字符集是SQL_ASCII，该函数会返回字节数而非字符数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| CHARACTER_LENGTH()  | 如果数据库字符集是SQL_ASCII，该函数会返回字节数而非字符数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| CONCAT()            | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| CONCAT_WS()         | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| HEX()               | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| LENGTH()            | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| LPAD()              | MySQL默认最大填充长度为1398101，GaussDB默认最大长度为1048576。在不同字符集下，最大填充长度会有差异，例如字符集为GBK时，GaussDB默认最大长度为2097152。                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| RPAD()              | MySQL默认最大填充长度为1398101，GaussDB默认最大长度为1048576。在不同字符集下，最大填充长度会有差异，例如字符集为GBK时，GaussDB默认最大长度为2097152。                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| 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()         | 第一个入参节点返回的字符序为BINARY时，MySQL可能依旧以不同的字符序逻辑处理（取决于内层嵌套的函数），而GaussDB以BINARY字符序进行函数处理，导致截取的字节长度不同。                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| SUBSTRING_INDEX()   | - 在第三个入参为负数时，MySQL与GaussDB的比较逻辑不同，会导致结果可能存在差异。  - 当第三个入参为正数时，由于MySQL 5.7以int32位存储，会存在回绕问题导致结果不正确。MySQL 8.0修复了该问题以int64为存储，GaussDB以8.0为准。当入参值超过2\^63 -1时，也会发生回绕，可能导致第三个参数获取为负数，结果存在差异。                                                                                                         |
| TRIM()              | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| UCASE()             | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| UPPER()             | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| UNHEX()             | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| FIELD()             | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| COMPRESS()          | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| 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默认补充空格。   |
| INSERT()            | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| INSTR()             | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| OCTET_LENGTH()      | -                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   
