对于非二进制字符串(字符
,VARCHAR
,文本
),字符串搜索使用比较操作数的排序。对于二进制字符串(二进制
,VARBINARY
,团
),比较使用操作数中字节的数值;这意味着对于字母字符,比较是区分大小写的。
非二进制字符串和二进制字符串之间的比较被视为二进制字符串的比较。
简单的比较操作(>=, >, =, <, <=
排序和分组)是基于每个字符的”排序值。”具有相同排序值的字符被视为相同的字符。例如,如果e
而且e
在给定排序规则中具有相同的排序值,则它们比较为相等。
默认的字符集和排序规则为utf8mb4
而且utf8mb4_0900_ai_ci
,因此非二进制字符串比较在默认情况下不区分大小写。这意味着如果你用
,您将得到所有以col_name
“%”一个
或一个
.要使此搜索区分大小写,请确保其中一个操作数具有区分大小写或二进制排序规则。例如,如果您正在比较列和字符串,而列和字符串都具有utf8mb4
字符集,您可以使用核对
操作符来使任意一个操作数具有utf8mb4_0900_as_cs
或utf8mb4_bin
排序:
col_nameCOLLATE utf8mb4_0900_as_cs LIKE 'a%'col_name像“a%”COLLATE utf8mb4_0900_as_cscol_nameCOLLATE utf8mb4_bin LIKE 'a%'col_name像“a%”COLLATE utf8mb4_bin
如果希望始终以区分大小写的方式处理列,请使用区分大小写或二进制排序规则声明它。看到第13.1.20节," CREATE TABLE语句".
若要使非二进制字符串的区分大小写比较不区分大小写,请使用核对
为不区分大小写的排序规则命名。下面示例中的字符串通常区分大小写,但是核对
将比较更改为不区分大小写:
SET NAMES 'utf8mb4';SET @s1 = 'mysql' COLLATE utf8mb4_bin, @s2 = 'mysql' COLLATE utf8mb4_bin;mysql> SELECT @s1 = @s2;+-----------+ | @ s1 = @s2 | +-----------+ | 0 | +-----------+ mysql >选择@s1核对utf8mb4_0900_ai_ci = @s2;+--------------------------------------+ | @ s1核对utf8mb4_0900_ai_ci = @s2 | +--------------------------------------+ | 1 | +--------------------------------------+
二进制字符串在比较时区分大小写。若要将字符串比较为不区分大小写,请将其转换为非二进制字符串并使用核对
要命名一个不区分大小写的排序规则:
mysql> SET @s = BINARY ' mysql ';SELECT @s = 'mysql';+--------------+ | @ s = ' mysql ' | +--------------+ | 0 | +--------------+ mysql >选择转换(@使用utf8mb4)核对utf8mb4_0900_ai_ci =“mysql”;+----------------------------------------------------------------+ | 转换(@使用utf8mb4)核对utf8mb4_0900_ai_ci = ' mysql ' | +----------------------------------------------------------------+ | 1 | +----------------------------------------------------------------+
方法确定值是作为非二进制字符串比较还是作为二进制字符串比较排序()
函数。这个例子表明(版本)
返回一个具有不区分大小写排序规则的字符串,因此比较不区分大小写:
mysql >选择排序(版本());+----------------------+ | 排序(版本 ()) | +----------------------+ | utf8_general_ci | +----------------------+
对于二进制字符串,排序规则值为二进制
,所以比较是区分大小写的。你可以在其中看到二进制
用于压缩函数,它返回二进制字符串作为一般规则:
mysql >选择排序(压缩(' x '));+--------------------------+ | 排序(压缩(“x ')) | +--------------------------+ | 二进制 | +--------------------------+
方法可检查字符串的排序值WEIGHT_STRING ()
可能是有益的。看到第12.8节“字符串函数和操作符”.