命令
case when ltrim(rtrim(City_old)) = ltrim(rtrim(City_New)) then 'Y'
不考虑区分大小写的差异。
在有功能时,有人可以帮助我使用区分大小写的匹配吗?预先感谢
答案 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
这假定两个字符串的原始排序规则是相同的(对于同一表中的两列似乎合理)。