在区分大小写时使用区分大小写的匹配

时间:2018-06-24 18:23:35

标签: mysql sql case-sensitive

命令

case when ltrim(rtrim(City_old)) = ltrim(rtrim(City_New)) then 'Y' 

不考虑区分大小写的差异。

在有功能时,有人可以帮助我使用区分大小写的匹配吗?预先感谢

2 个答案:

答案 0 :(得分:1)

区分大小写或不区分大小写是基于为列定义的字符串排序规则。 MySQL默认为不区分大小写的排序规则,因此默认情况下所有比较都将忽略大小写。

mysql> select case when 'city' = 'City' then 'Y' else 'N' end as matches;
+---------+
| matches |
+---------+
| Y       |
+---------+

您可以通过覆盖排序规则以区分大小写的方式进行比较:

mysql> select case when 'city' collate utf8mb4_bin = 'City' then 'Y' else 'N' end as matches;
+---------+
| matches |
+---------+
| N       |
+---------+

您必须选择与要比较的字符串的字符集兼容的排序规则。您可以检查当前MySQL实例支持哪些兼容的排序规则:

mysql> SELECT * FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY 
    WHERE character_set_name='utf8mb4';
+------------------------+--------------------+
| COLLATION_NAME         | CHARACTER_SET_NAME |
+------------------------+--------------------+
| utf8mb4_general_ci     | utf8mb4            |
| utf8mb4_bin            | utf8mb4            |
| utf8mb4_unicode_ci     | utf8mb4            |
| utf8mb4_icelandic_ci   | utf8mb4            |
. . .

所有以_ci结尾的归类均区分大小写。上面唯一的区分大小写的选项是utf8mb4_bin

与utf8类似:

mysql> SELECT * FROM INFORMATION_SCHEMA.COLLATION_CHARACTER_SET_APPLICABILITY 
    WHERE character_set_name='utf8';
+--------------------------+--------------------+
| COLLATION_NAME           | CHARACTER_SET_NAME |
+--------------------------+--------------------+
| utf8_general_ci          | utf8               |
| utf8_bin                 | utf8               |
| utf8_unicode_ci          | utf8               |
| utf8_icelandic_ci        | utf8               |
. . .

选择还取决于您使用的MySQL版本。他们不断引入新的字符集和排序规则,试图使MySQL支持标准更好。例如,在MySQL 8.0中,您可以使用排序规则utf8mb4_0900_as_cs

阅读https://dev.mysql.com/doc/refman/8.0/en/case-sensitivity.html了解更多详细信息。

答案 1 :(得分:0)

MySQL中的区分大小写通常是通过使用binary运算符来实现的:

(case when binary ltrim(rtrim(City_old)) = binary ltrim(rtrim(City_New))
      then 'Y' else 'N'
 end) as is_same

这假定两个字符串的原始排序规则是相同的(对于同一表中的两列似乎合理)。