14.8 字符串函数和运算符
表14.12 字符串函数和运算符
| Name | Description |
|---|---|
ASCII() |
返回左侧字符的数字值 |
BIN() |
返回一个包含数字的字符串的二进制表示 |
BIT_LENGTH() |
返回参数的比特长度 |
CHAR() |
返回每个整数的字符 |
CHAR_LENGTH() |
返回参数的字符数 |
CHARACTER_LENGTH() |
CHAR_LENGTH()的同义词 |
CONCAT() |
返回连接的字符串 |
CONCAT_WS() |
返回连接字符串 |
ELT() |
返回字符串的索引号 |
EXPORT_SET() |
返回一个字符串,其中每个比特都对应一个字符串 |
FIELD() |
返回参数在后续参数中的索引号 |
FIND_IN_SET() |
返回参数在字符串中的索引号 |
FORMAT() |
返回一个数字,格式化到指定的小数位数 |
HEX() |
返回一个字符串的十六进制表示 |
INSERT() |
在指定位置插入子串 |
INSTR() |
返回子串的第一个出现位置 |
LCASE() |
LOWER()的同义词 |
LEFT() |
返回指定字符数的左侧字符串 |
LENGTH() |
返回字符串的字节长度 |
LIKE |
简单模式匹配 |
LOAD_FILE() |
加载指定文件 |
LOCATE() |
返回子串的第一个出现位置 |
LOWER() |
将字符串转换为小写 |
LPAD() |
将字符串左对齐 |
LTRIM() |
删除字符串的左侧空格 |
MAKE_SET() |
返回一个由对应位的bit设置的字符串集 |
MATCH() |
执行全文搜索 |
MID() |
返回从指定位置开始的子串 |
NOT LIKE |
简单模式匹配的否定 |
NOT REGEXP |
REGEXP的否定 |
OCT() |
将数字转换为八进制字符串 |
OCTET_LENGTH() |
LENGTH()的同义词 |
ORD() |
返回字符串的第一个字符的ASCII码 |
POSITION() |
LOCATE()的同义词 |
QUOTE() |
将字符串转换为SQL语句 |
REGEXP |
字符串是否匹配正则表达式 |
REGEXP_INSTR() |
字符串匹配正则表达式的开始索引 |
REGEXP_LIKE() |
字符串是否匹配正则表达式 |
REGEXP_REPLACE() |
将字符串中的子串替换为正则表达式 |
REGEXP_SUBSTR() |
返回匹配正则表达式的子串 |
REPEAT() |
重复字符串指定次数 |
REPLACE() |
将指定的字符串替换为另一个字符串 |
REVERSE() |
反转字符串中的字符 |
RIGHT() |
返回指定的右侧字符 |
RLIKE |
字符串是否匹配正则表达式 |
RPAD() |
将字符串右侧追加指定次数 |
RTRIM() |
删除字符串右侧的空格 |
SOUNDEX() |
返回Soundex字符串 |
SOUNDS LIKE |
比较Soundex |
SPACE() |
返回指定数量的空格 |
STRCMP() |
比较两个字符串 |
SUBSTR() |
返回指定的子串 |
SUBSTRING() |
返回指定的子串 |
SUBSTRING_INDEX() |
返回字符串中的子串 |
TRIM() |
删除字符串的前后空格 |
UCASE() |
UPPER()的同义词 |
UNHEX() |
返回十六进制表示的字符串 |
UPPER() |
将字符串转换为大写 |
WEIGHT_STRING() |
返回字符串的权重字符串 |
字符串函数返回 NULL,如果结果的长度超过了max_allowed_packet系统变量的值。请参阅第7.1.1节,“配置服务器”。
对于操作字符串位置的函数,第一个位置是编号为1。
对于需要长度参数的函数,非整数参数将被四舍五入到最近的整数。
-
返回字符串
str的左most字符的数字值。如果str是空字符串,则返回0。如果str是NULL,则返回NULL。ASCII()适用于8位字符。mysql> SELECT ASCII('2'); -> 50 mysql> SELECT ASCII(2); -> 50 mysql> SELECT ASCII('dx'); -> 100请参阅
ORD()函数。 -
返回长整数
N的二进制表示形式,其中N是一个长整数(BIGINT)。这等同于CONV(。返回N,10,2)NULL如果N是NULL。mysql> SELECT BIN(12); -> '1100' -
返回字符串
str的长度,以比特为单位。返回NULL如果str是NULL。mysql> SELECT BIT_LENGTH('text'); -> 32 -
CHAR(N,... [USINGcharset_name])CHAR()将每个参数N解释为整数,并返回由这些整数给定的字符组成的字符串。NULL值将被跳过。mysql> SELECT CHAR(77,121,83,81,'76'); +--------------------------------------------------+ | CHAR(77,121,83,81,'76') | +--------------------------------------------------+ | 0x4D7953514C | +--------------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHAR(77,77.3,'77.3'); +--------------------------------------------+ | CHAR(77,77.3,'77.3') | +--------------------------------------------+ | 0x4D4D4D | +--------------------------------------------+ 1 row in set (0.00 sec)默认情况下,
CHAR()返回二进制字符串。要生产给定字符集的字符串,请使用可选的USING子句:mysql> SELECT CHAR(77,121,83,81,'76' USING utf8mb4); +---------------------------------------+ | CHAR(77,121,83,81,'76' USING utf8mb4) | +---------------------------------------+ | MySQL | +---------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT CHAR(77,77.3,'77.3' USING utf8mb4); +------------------------------------+ | CHAR(77,77.3,'77.3' USING utf8mb4) | +------------------------------------+ | MMM | +------------------------------------+ 1 row in set, 1 warning (0.00 sec) mysql> SHOW WARNINGS; +---------+------+-------------------------------------------+ | Level | Code | Message | +---------+------+-------------------------------------------+ | Warning | 1292 | Truncated incorrect INTEGER value: '77.3' | +---------+------+-------------------------------------------+ 1 row in set (0.00 sec)如果给定了
USING,并且结果字符串对于给定的字符集非法,会发出警告。另外,如果启用了严格的SQL模式,来自CHAR()的结果将是NULL。如果从mysql客户端调用
CHAR(),则二进制字符串将以十六进制表示,取决于--binary-as-hex的值。关于该选项的更多信息,请参见第6.5.1节,“mysql — The MySQL Command-Line Client”。CHAR()的参数大于255将被转换为多个结果字节。例如CHAR(256)等同于CHAR(1,0),而CHAR(256*256)等同于CHAR(1,0,0):mysql> SELECT HEX(CHAR(1,0)), HEX(CHAR(256)); +----------------+----------------+ | HEX(CHAR(1,0)) | HEX(CHAR(256)) | +----------------+----------------+ | 0100 | 0100 | +----------------+----------------+ 1 row in set (0.00 sec) mysql> SELECT HEX(CHAR(1,0,0)), HEX(CHAR(256*256)); +------------------+--------------------+ | HEX(CHAR(1,0,0)) | HEX(CHAR(256*256)) | +------------------+--------------------+ | 010000 | 010000 | +------------------+--------------------+ 1 row in set (0.00 sec) -
返回字符串
str的长度,以代码点为单位。多字节字符被视为单个代码点。这意味着,对于包含两个3字节字符的字符串,LENGTH()返回6,而CHAR_LENGTH()返回2,如以下所示:mysql> SET @dolphin:='海豚'; Query OK, 0 rows affected (0.01 sec) mysql> SELECT LENGTH(@dolphin), CHAR_LENGTH(@dolphin); +------------------+-----------------------+ | LENGTH(@dolphin) | CHAR_LENGTH(@dolphin) | +------------------+-----------------------+ | 6 | 2 | +------------------+-----------------------+ 1 row in set (0.00 sec)CHAR_LENGTH()返回NULL如果str是NULL。 -
返回连接参数的字符串。可以有一个或多个参数。如果所有参数都是非二进制字符串,则结果也是非二进制字符串。如果参数中包含任何二进制字符串,则结果是二进制字符串。数字参数将被转换为其等效的非二进制字符串形式。
CONCAT()返回NULL如果任何参数是NULL。mysql> SELECT CONCAT('My', 'S', 'QL'); -> 'MySQL' mysql> SELECT CONCAT('My', NULL, 'QL'); -> NULL mysql> SELECT CONCAT(14.3); -> '14.3'对于quoted字符串,可以通过将字符串相邻连接来进行连接:
mysql> SELECT 'My' 'S' 'QL'; -> 'MySQL'如果在
CONCAT()中调用了mysql客户端,二进制字符串结果将使用十六进制表示法,取决于--binary-as-hex的值。有关该选项的更多信息,请参见第6.5.1节,“mysql — MySQL 命令行客户端”。 -
CONCAT_WS(separator,str1,str2,...)CONCAT_WS()表示连接字符串的特殊形式,第一个参数是连接符,用于连接其它参数。连接符可以是字符串,可以是其它参数。如果连接符为NULL,结果为NULL。mysql> SELECT CONCAT_WS(',','First name','Second name','Last Name'); -> 'First name,Second name,Last Name' mysql> SELECT CONCAT_WS(',','First name',NULL,'Last Name'); -> 'First name,Last Name'CONCAT_WS()不跳过空字符串,但是它会跳过连接符后的所有NULL值。 -
ELT()返回第N个字符串列表的元素:str1如果N=1,str2如果N=2,以此类推。返回NULL如果N小于1,大于参数的数量或NULL。ELT()是FIELD()的补充。mysql> SELECT ELT(1, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Aa' mysql> SELECT ELT(4, 'Aa', 'Bb', 'Cc', 'Dd'); -> 'Dd' -
EXPORT_SET(bits,on,off[,separator[,number_of_bits]])返回一个字符串,使得每个在值
bits中的位都对应一个on字符串,而每个未设置的位对应一个off字符串。从右到左(从低位到高位)检查bits中的位。字符串从左到右添加到结果中,使用separator字符串(默认为逗号字符,)分隔。被检查的位数由number_of_bits指定,缺省为64。如果number_of_bits大于64,则被静默截断到64。如果number_of_bits为-1,则被视为64。mysql> SELECT EXPORT_SET(5,'Y','N',',',4); -> 'Y,N,Y,N' mysql> SELECT EXPORT_SET(6,'1','0',',',10); -> '0,1,1,0,0,0,0,0,0,0' -
返回
str在str1、str2、str3、...列表中的索引(位置)。返回0如果str未找到。如果
FIELD()的所有参数都是字符串,则所有参数将被比较为字符串。如果所有参数都是数字,则将被比较为数字。否则,参数将被比较为双精度。如果
str是NULL,则返回值为0因为NULL无法与任何值进行等值比较。FIELD()是ELT()的补充。mysql> SELECT FIELD('Bb', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 2 mysql> SELECT FIELD('Gg', 'Aa', 'Bb', 'Cc', 'Dd', 'Ff'); -> 0 -
返回值在1到
N之间,如果字符串str在字符串列表strlist中,其中N是字符串列表中的子串数。字符串列表是一个由逗号字符,分隔的字符串。 如果第一个参数是常量字符串,第二个参数是SET类型的列,则FIND_IN_SET()函数将使用位算术优化。返回0如果str未在strlist中或strlist为空字符串。返回NULL如果任何参数是NULL。这个函数在第一个参数包含逗号字符,时不工作正常。mysql> SELECT FIND_IN_SET('b','a,b,c,d'); -> 2 -
将数字
X格式化为类似于'#,###,###.##'的格式,四舍五入到D位小数,并将结果作为字符串返回。如果D为0,结果没有小数点或小数部分。如果X或D为NULL,函数返回NULL。可选的第三个参数允许指定用于结果数字的 locale,包括小数点、千位分隔符和分隔符。允许的 locale 值与
lc_time_names系统变量的合法值相同(见第12.16节,“MySQL 服务器 locale 支持”)。如果 locale 为NULL或未指定,使用默认 locale'en_US'。mysql> SELECT FORMAT(12332.123456, 4); -> '12,332.1235' mysql> SELECT FORMAT(12332.1,4); -> '12,332.1000' mysql> SELECT FORMAT(12332.2,0); -> '12,332' mysql> SELECT FORMAT(12332.2,2,'de_DE'); -> '12.332,20' -
从 base64 编码的字符串中解码,返回解码结果作为二进制字符串。如果参数为
NULL或不是有效的 base64 字符串,函数返回NULL。见TO_BASE64()的描述,以了解编码和解码规则。mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc'如果从mysql客户端调用
FROM_BASE64(),二进制字符串将以十六进制表示。如果想禁用这个行为,可以在启动mysql客户端时将--binary-as-hex的值设置为0。更多关于该选项的信息,请见Section 6.5.1, “mysql — The MySQL Command-Line Client”。 -
对于字符串参数
str,HEX()将将str转换为十六进制字符串,每个字节的每个字符都被转换为两个十六进制数字。 (多字节字符因此将变成多于两个数字。) 逆操作是由UNHEX()函数执行。对于数字参数
N,HEX()将将Ntreated as a longlong (BIGINT) 数字的值表示为十六进制字符串。这等同于CONV(。 逆操作是由N,10,16)CONV(HEX(执行。N),16,10)对于
NULL参数,这个函数将返回NULL。mysql> SELECT X'616263', HEX('abc'), UNHEX(HEX('abc')); -> 'abc', 616263, 'abc' mysql> SELECT HEX(255), CONV(HEX(255),16,10); -> 'FF', 255 -
将将字符串
str中从位置pos开始的len个字符长的子串替换为字符串newstr。如果pos不在字符串的长度范围内,则返回原始字符串。如果len不在子串的长度范围内,则将子串从位置pos开始的剩余部分替换为字符串newstr。如果任何参数为NULL,则返回NULL。mysql> SELECT INSERT('Quadratic', 3, 4, 'What'); -> 'QuWhattic' mysql> SELECT INSERT('Quadratic', -1, 4, 'What'); -> 'Quadratic' mysql> SELECT INSERT('Quadratic', 3, 100, 'What'); -> 'QuWhat'这个函数是多字节安全的。
-
返回字符串
str中第一次出现子串substr的位置。这与LOCATE()的二参数形式相同,只是参数顺序相反。mysql> SELECT INSTR('foobarbar', 'bar'); -> 4 mysql> SELECT INSTR('xbar', 'foobar'); -> 0这个函数是多字节安全的,并且在至少一个参数是二进制字符串时是区分大小写的。如果任何参数为
NULL,则返回NULL。 -
LCASE()在视图中使用时将被重写为LOWER(),以存储视图的定义。 (Bug #12844279) -
从字符串
str的左侧返回len个字符,或者如果任何参数为NULL则返回NULL。mysql> SELECT LEFT('foobarbar', 5); -> 'fooba'该函数支持多字节字符。
-
返回字符串
str的长度,以字节为单位。多字节字符将被视为多个字节。这意味着,对于包含五个 2 字节字符的字符串,LENGTH()将返回10,而CHAR_LENGTH()将返回5。如果str为NULL则返回NULL。mysql> SELECT LENGTH('text'); -> 4NoteOpenGIS 空间函数
Length()在 MySQL 中被命名为ST_Length()。 -
读取文件并将其内容作为字符串返回。要使用该函数,文件必须位于服务器主机上,您必须指定文件的完整路径名,并且您必须拥有
FILE权限。文件必须可读由服务器,并且其大小不能超过max_allowed_packet字节。如果secure_file_priv系统变量设置为非空目录名,那么要加载的文件必须位于该目录中。如果文件不存在或无法读取,因为前提条件之一不满足,该函数将返回
NULL。系统变量
character_set_filesystem控制了将文件名作为字面字符串给出的解释。mysql> UPDATE t SET blob_col=LOAD_FILE('/tmp/picture') WHERE id=1; -
LOCATE(,substr,str)LOCATE(substr,str,pos)首先,语法返回子串
substr在字符串str中的第一次出现的位置。第二种语法返回子串substr在字符串str中的第一次出现的位置,从位置pos开始。返回0如果substr不在str中。返回NULL如果任何参数为NULL。mysql> SELECT LOCATE('bar', 'foobarbar'); -> 4 mysql> SELECT LOCATE('xbar', 'foobar'); -> 0 mysql> SELECT LOCATE('bar', 'foobarbar', 5); -> 7该函数是多字节安全的,并且在至少一个参数是二进制字符串时是大小写敏感的。
-
返回字符串
str,将所有字符根据当前字符集映射更改为小写,或者NULL如果str为NULL。默认字符集为utf8mb4。mysql> SELECT LOWER('QUADRATICALLY'); -> 'quadratically'LOWER()(和UPPER())在应用于二进制字符串(BINARY,VARBINARY,BLOB)时无效。要对二进制字符串进行字母大小写转换,首先将其转换为非二进制字符串,使用适合存储在字符串中的数据的字符集:mysql> SET @str = BINARY 'New York'; mysql> SELECT LOWER(@str), LOWER(CONVERT(@str USING utf8mb4)); +-------------+------------------------------------+ | LOWER(@str) | LOWER(CONVERT(@str USING utf8mb4)) | +-------------+------------------------------------+ | New York | new york | +-------------+------------------------------------+对于Unicode字符集的排序规则,
LOWER()和UPPER()根据Unicode排序算法(UCA)版本在排序规则名称中,如果有一个版本,否则根据UCA 4.0.0。例如,utf8mb4_0900_ai_ci和utf8mb3_unicode_520_ci根据UCA 9.0.0和5.2.0工作,而utf8mb3_unicode_ci根据UCA 4.0.0工作。见Section 12.10.1,“Unicode Character Sets”。该函数是多字节安全的。
LCASE()在视图中使用时将被重写为LOWER()。 -
返回字符串
str,使用字符串padstr从左侧填充到长度为len字符。如果str的长度超过len,返回值将被截断到len字符。mysql> SELECT LPAD('hi',4,'??'); -> '??hi' mysql> SELECT LPAD('hi',1,'??'); -> 'h'返回
NULL如果任何参数为NULL。 -
返回字符串
str,去除前导空格。返回NULL如果str是NULL。mysql> SELECT LTRIM(' barbar'); -> 'barbar'该函数是多字节安全的。
-
返回一个集合值(一个以
,字符分隔的字符串),包含对应于bits中的位的字符串。str1对应于位0,str2对应于位1,以此类推。NULL值在str1、str2等中的不被追加到结果中。mysql> SELECT MAKE_SET(1,'a','b','c'); -> 'a' mysql> SELECT MAKE_SET(1 | 4,'hello','nice','world'); -> 'hello,world' mysql> SELECT MAKE_SET(1 | 4,'hello','nice',NULL,'world'); -> 'hello' mysql> SELECT MAKE_SET(0,'a','b','c'); -> '' -
返回一个字符串表示
N的八进制值,其中N是一个长整数(BIGINT)数。这等同于CONV(。返回N,10,8)NULL如果N是NULL。mysql> SELECT OCT(12); -> '14' -
OCTET_LENGTH()是LENGTH()的同义词。 -
如果字符串
str的左most字符是一个多字节字符,返回该字符的代码,根据其组成字节的数字值使用以下公式计算:(1st byte code) + (2nd byte code * 256) + (3rd byte code * 256^2) ...如果左most 字符不是多字节字符,
ORD()将返回与ASCII()函数相同的值。该函数返回NULL如果str是NULL。mysql> SELECT ORD('2'); -> 50 -
将字符串转换为可以用作 SQL 语句中的正确转义数据值。字符串返回以单引号括起来,并将每个 backslash (
\),单引号 ('), ASCIINUL, 和 Control+Z 之前的 backslash。 如果参数是NULL, 则返回值是单引号括起来的““NULL””。mysql> SELECT QUOTE('Don\'t!'); -> 'Don\'t!' mysql> SELECT QUOTE(NULL); -> NULL与之相比,请参阅第11.1.1节,“String Literals”中的文字字符串和 C API 的引号规则,以及mysql_real_escape_string_quote()。
-
返回一个字符串,该字符串是将字符串
str重复count次。如果count小于 1,则返回一个空字符串。返回NULL如果str或count是NULL。mysql> SELECT REPEAT('MySQL', 3); -> 'MySQLMySQLMySQL' -
将字符串
str中所有出现的字符串from_str替换为字符串to_str。REPLACE()在搜索from_str时进行区分大小写的匹配。mysql> SELECT REPLACE('www.mysql.com', 'w', 'Ww'); -> 'WwWwWw.mysql.com'该函数是多字节安全的。它返回
NULL如果其中任何一个参数是NULL。 -
将字符串
str的字符顺序反转,或者如果str为NULL则返回NULL.mysql> SELECT REVERSE('abc'); -> 'cba'该函数是多字节安全的。
-
从字符串
str的右侧获取len个字符,或者如果任何参数为NULL则返回NULL.mysql> SELECT RIGHT('foobarbar', 4); -> 'rbar'该函数是多字节安全的。
-
将字符串
str右对齐到len个字符,并使用字符串padstr填充。如果str的长度超过len,则返回的字符串将被截断。如果str、padstr或len为NULL,则函数返回NULL.mysql> SELECT RPAD('hi',5,'?'); -> 'hi???' mysql> SELECT RPAD('hi',1,'?'); -> 'h'该函数是多字节安全的。
-
将字符串
str的尾部空格字符删除。mysql> SELECT RTRIM('barbar '); -> 'barbar'该函数是多字节安全的,并且如果
str为NULL则返回NULL. -
将字符串
str转换为soundex字符串,或者如果str为NULL则返回NULL。两个相似的声音字符串应该具有相同的soundex字符串。标准的soundex字符串是四个字符长,但是SOUNDEX()函数返回一个任意长的字符串。您可以使用SUBSTRING()函数来获取标准的soundex字符串。字符串str中的所有非字母字符将被忽略。字符串str中的所有非A-Z字符将被视为元音。Important使用
SOUNDEX()函数时,您应该注意以下限制:-
当前实现的目的是在英语语言中工作。其他语言的字符串可能不产生可靠的结果。
-
该函数不保证在使用多字节字符集,包括
utf-8,提供一致的结果。请查看Bug #22638以获取更多信息。
mysql> SELECT SOUNDEX('Hello'); -> 'H400' mysql> SELECT SOUNDEX('Quadratically'); -> 'Q36324'Note该函数实现了原始 Soundex 算法,而不是更流行的增强版本(也由 D. Knuth 描述)。不同之处在于原始版本首先删除元音,然后删除重复项,而增强版本首先删除重复项,然后删除元音。
-
-
返回一个由
个空格组成的字符串,如果N是NNULL,则返回NULL。mysql> SELECT SPACE(6); -> ' ' -
SUBSTR(、,str)posSUBSTR(、FROMstr)posSUBSTR(、,str,pos)lenSUBSTR(FROMstrFORpos)lenSUBSTR()是SUBSTRING()的同义词。 -
SUBSTRING(、,str)posSUBSTRING(、FROMstr)posSUBSTRING(、,str,pos)lenSUBSTRING(FROMstrFORpos)len没有指定
len参数的形式将从字符串str从位置pos开始返回子串。指定len参数的形式将从字符串str从位置pos开始返回长度为len的子串。使用FROM的形式是标准SQL语法。也可以使用负值为pos。在这种情况下,子串的开始是从字符串的末尾pos个字符处,而不是开头。负值可以用于pos在任何形式的函数中。将pos设置为0将返回空字符串。对于
SUBSTRING()的所有形式,字符串的第一个字符的位置被认为是1。mysql> SELECT SUBSTRING('Quadratically',5); -> 'ratically' mysql> SELECT SUBSTRING('foobarbar' FROM 4); -> 'barbar' mysql> SELECT SUBSTRING('Quadratically',5,6); -> 'ratica' mysql> SELECT SUBSTRING('Sakila', -3); -> 'ila' mysql> SELECT SUBSTRING('Sakila', -5, 3); -> 'aki' mysql> SELECT SUBSTRING('Sakila' FROM -4 FOR 2); -> 'ki'这个函数是多字节安全的。它将返回
NULL如果任何参数是NULL。如果
len小于1,结果将是空字符串。 -
SUBSTRING_INDEX(str,delim,count)从字符串
str返回以delim为分隔符的子串。 如果count是正数,从左到右的所有子串将被返回。如果count是负数,从右到左的所有子串将被返回。SUBSTRING_INDEX()在搜索delim时进行了区分大小写的匹配。mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', 2); -> 'www.mysql' mysql> SELECT SUBSTRING_INDEX('www.mysql.com', '.', -2); -> 'mysql.com'这个函数是多字节安全的。
SUBSTRING_INDEX()将返回NULL如果任何参数是NULL。 -
将字符串参数转换为base-64编码形式并返回结果为字符字符串,以连接的字符集和排序规则。如果参数不是字符串,它将被转换为字符串,然后进行转换。结果将是
NULL如果参数是NULL。base-64编码字符串可以使用FROM_BASE64()函数进行解码。mysql> SELECT TO_BASE64('abc'), FROM_BASE64(TO_BASE64('abc')); -> 'JWJj', 'abc'不同的base-64编码方案存在。这些是
TO_BASE64()和FROM_BASE64()使用的编码和解码规则:-
字母值62的编码为
'+'。 -
alphabet 值的编码为
'/'。 -
编码输出由4个可打印字符组成。每3个字节的输入数据使用4个字符编码。如果最后一个组是非完整的,它将使用
'='字符填充到4个字符。 -
编码输出中的每76个字符后添加一个换行符,以将长输出分割成多行。
-
解码器识别并忽略换行符、回车符、制表符和空格。
-
-
TRIM([{BOTH | LEADING | TRAILING} [,remstr] FROM]str)TRIM([remstrFROM]str)将字符串
str中的所有remstr前缀或后缀删除。如果没有指定BOTH,LEADING或TRAILING指令,假定BOTH。remstr是可选的,如果不指定,则删除空格。mysql> SELECT TRIM(' bar '); -> 'bar' mysql> SELECT TRIM(LEADING 'x' FROM 'xxxbarxxx'); -> 'barxxx' mysql> SELECT TRIM(BOTH 'x' FROM 'xxxbarxxx'); -> 'bar' mysql> SELECT TRIM(TRAILING 'xyz' FROM 'barxxyz'); -> 'barx'该函数是多字节安全的。如果任何参数为
NULL,则返回NULL。 -
UCASE()在视图中使用将被重写为UPPER()。 -
对于字符串参数
str,UNHEX(将每对字符在参数中解释为十六进制数字,并将其转换为该数字表示的字节。返回值是一个二进制字符串。str)mysql> SELECT UNHEX('4D7953514C'); -> 'MySQL' mysql> SELECT X'4D7953514C'; -> 'MySQL' mysql> SELECT UNHEX(HEX('string')); -> 'string' mysql> SELECT HEX(UNHEX('1267')); -> '1267'参数字符串中的字符必须是合法的十六进制数字:
'0'..'9','A'..'F','a'..'f'。如果参数包含任何非十六进制数字或是NULL,则结果为NULL:mysql> SELECT UNHEX('GG'); +-------------+ | UNHEX('GG') | +-------------+ | NULL | +-------------+ mysql> SELECT UNHEX(NULL); +-------------+ | UNHEX(NULL) | +-------------+ | NULL | +-------------+在使用
UNHEX()函数时,如果参数是BINARY列,可能会出现NULL结果。这是因为在存储时,值会被padding为0x00字节,但在检索时这些字节不会被删除。例如,'41'将被存储到UNHEX()函数中,但检索时将被删除尾部的空格,返回X'41'。相比之下,'41'将被存储到UNHEX()函数中,但检索时将保留尾部的0x00字节,返回'41\0'。'\0'不是合法的十六进制数字,所以UNHEX()函数将返回NULL。对于数字参数
N,UNHEX()函数不执行HEX()的逆运算。使用CONV(HEX(代替。见N),16,10)HEX()的描述。如果
UNHEX()函数在mysql客户端中被调用,二进制字符串将使用十六进制表示法,取决于--binary-as-hex的值。有关该选项的更多信息,请见Section 6.5.1, “mysql — The MySQL Command-Line Client”。 -
返回字符串
str,将所有字符更改为大写,根据当前字符集映射。或如果str是NULL,则返回NULL。默认字符集为utf8mb4。mysql> SELECT UPPER('Hej'); -> 'HEJ'请查看
LOWER()的描述,以获取与UPPER()相关的信息。这包括了关于如何将二进制字符串(BINARY,VARBINARY,BLOB)的字母大小写转换信息,以及Unicode字符集的大小写折叠信息。这个函数是多字节安全的。
UCASE()在视图中使用时将被重写为UPPER() -
WEIGHT_STRING(str[AS {CHAR|BINARY}(N)] [flags])这个函数返回输入字符串的权重字符串。返回值是一个二进制字符串,表示字符串的比较和排序值,如果输入字符串为
NULL,则返回NULL。它具有以下属性:-
如果
WEIGHT_STRING(=str1)WEIGHT_STRING(,则str2)(str1=str2str1和str2被认为是等价的) -
如果
WEIGHT_STRING(<str1)WEIGHT_STRING(,则str2)(str1<str2str1在str2之前排序)
WEIGHT_STRING()是一个用于内部使用的调试函数。它的行为可能会在 MySQL 版本之间更改。它可以用于测试和调试排序规则,特别是如果您添加了新的排序规则。请查看Section 12.14, “Adding a Collation to a Character Set”。以下是该函数的参数列表。更多详细信息请查看以下讨论。
-
str: 输入字符串表达式。 -
AS子句:可选;将输入字符串转换为给定的类型和长度。 -
flags: 可选;未使用。
输入字符串,
str,是一个字符串表达式。如果输入是一个非二进制(字符)字符串,如CHAR、VARCHAR或TEXT值,返回值包含字符串的排序权重。如果输入是一个二进制(字节)字符串,如BINARY、VARBINARY或BLOB值,返回值与输入相同(每个字节的权重为字节值)。如果输入是NULL,WEIGHT_STRING()返回NULL。示例:
mysql> SET @s = _utf8mb4 'AB' COLLATE utf8mb4_0900_ai_ci; mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | AB | 4142 | 1C471C60 | +------+---------+------------------------+mysql> SET @s = _utf8mb4 'ab' COLLATE utf8mb4_0900_ai_ci; mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | ab | 6162 | 1C471C60 | +------+---------+------------------------+mysql> SET @s = CAST('AB' AS BINARY); mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | AB | 4142 | 4142 | +------+---------+------------------------+mysql> SET @s = CAST('ab' AS BINARY); mysql> SELECT @s, HEX(@s), HEX(WEIGHT_STRING(@s)); +------+---------+------------------------+ | @s | HEX(@s) | HEX(WEIGHT_STRING(@s)) | +------+---------+------------------------+ | ab | 6162 | 6162 | +------+---------+------------------------+前面的示例使用
HEX()显示WEIGHT_STRING()结果。由于结果是一个二进制值,HEX()在结果中包含非打印值时特别有用,可以将其显示为可打印形式:mysql> SET @s = CONVERT(X'C39F' USING utf8mb4) COLLATE utf8mb4_czech_ci; mysql> SELECT HEX(WEIGHT_STRING(@s)); +------------------------+ | HEX(WEIGHT_STRING(@s)) | +------------------------+ | 0FEA0FEA | +------------------------+对于非
NULL返回值,返回值的数据类型是VARBINARY如果其长度在VARBINARY的最大长度范围内,否则数据类型是BLOB。可以使用
AS子句将输入字符串转换为非二进制或二进制字符串,并强制其长度为给定的值:-
AS CHAR(将字符串转换为非二进制字符串,并在右侧使用空格填充到N)N个字符长度。N必须至少为1。如果N小于输入字符串的长度,字符串将被截断到N个字符长度。不会出现截断警告。 -
AS BINARY(类似,但将字符串转换为二进制字符串,N)N以字节为单位测量(不是字符),填充使用0x00字节(不是空格)。
mysql> SET NAMES 'latin1'; mysql> SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4))); +-------------------------------------+ | HEX(WEIGHT_STRING('ab' AS CHAR(4))) | +-------------------------------------+ | 41422020 | +-------------------------------------+ mysql> SET NAMES 'utf8mb4'; mysql> SELECT HEX(WEIGHT_STRING('ab' AS CHAR(4))); +-------------------------------------+ | HEX(WEIGHT_STRING('ab' AS CHAR(4))) | +-------------------------------------+ | 1C471C60 | +-------------------------------------+mysql> SELECT HEX(WEIGHT_STRING('ab' AS BINARY(4))); +---------------------------------------+ | HEX(WEIGHT_STRING('ab' AS BINARY(4))) | +---------------------------------------+ | 61620000 | +---------------------------------------+flags子句当前是未使用的。如果从
WEIGHT_STRING()中调用,使用mysql客户端,二进制字符串将使用十六进制表示法,取决于--binary-as-hex的值。关于该选项的更多信息,请参见第6.5.1节,“mysql — MySQL命令行客户端”。 -