以下SQL语句如何在MySQL中返回true
?
SELECT 'SeP' = 'sęp';
mysql> select 'SeP' = 'sęp';
+----------------+
| 'SeP' = 'sęp' |
+----------------+
| 1 |
+----------------+
1 row in set (0.00 sec)
我的数据库的字符集和整理如下。
mysql> select @@character_set_database, @@collation_database, @@collation_connection;
+--------------------------+----------------------+------------------------+
| @@character_set_database | @@collation_database | @@collation_connection |
+--------------------------+----------------------+------------------------+
| utf8mb4 | utf8mb4_general_ci | utf8_general_ci |
+--------------------------+----------------------+------------------------+
1 row in set (0.00 sec)
答案 0 :(得分:7)
你有一个不区分大小写(在排序规则名称的末尾ci
表示这一点)和泛型排序规则,因此MySQL在不区分大小写的情况下比较2个字符串,通常是重音不敏感的方式,因此两个字符串是同样的。
Case sensitivity in string searches上的MySQL手册说:
对于非二进制字符串(CHAR,VARCHAR,TEXT),字符串搜索使用比较操作数的排序规则。对于二进制字符串(BINARY,VARBINARY,BLOB),比较使用操作数中字节的数值;这意味着对于字母字符,比较将区分大小写。
处理非二进制字符串和二进制字符串之间的比较 作为二进制字符串的比较。
简单的比较操作(> =,>,=,<,< =,排序和分组) 基于每个角色的“排序值”。字符与之相同 排序值被视为相同的字符。例如,如果e和é 在给定的排序规则中具有相同的排序值,它们相等。
要强制区分大小写,请使用区分大小写(_cs
)或二进制排序规则(_bin
)。要强制重音敏感度,您需要使用特定于语言的排序规则(在您的情况下为utf8mb4_polish_xxx)或二进制排序规则。通用排序规则很少区分重音字符和非重音字符。
答案 1 :(得分:0)
COLLATION utf8mb4_polish_ci
会将这些视为“单独的字母”:ą ć ę ń ś ź ż
例如,a
< ą
< b
。在大多数其他排序规则中,a
= ą
< b
。
mysql> SET NAMES utf8mb4 COLLATE utf8mb4_polish_ci;
mysql> SELECT 'SeP' = 'sęp';
+----------------+
| 'SeP' = 'sęp' |
+----------------+
| 0 |
+----------------+
有关各种排序规则有何不同的详细信息,请参阅this。