使用区分大小写的匹配

14ifxucb  于 2021-06-24  发布在  Mysql
关注(0)|答案(2)|浏览(443)

命令

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

不考虑区分大小写的差异。
有人能帮我使用区分大小写的匹配吗?提前谢谢

plicqrtu

plicqrtu1#

mysql中的区分大小写通常是通过使用 binary 操作员:

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

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

1cosmwyk

1cosmwyk2#

区分大小写或不区分大小写取决于为列定义的字符串排序规则。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 更多细节。

相关问题