Использование чувствительного к регистру соответствия в случае, когда функция - PullRequest
0 голосов
/ 24 июня 2018

Команда

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

не учитывает различия с учетом регистра.

Может кто-нибудь помочь мне в использовании чувствительного к регистру совпадения в случае, когда функция? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 24 июня 2018

Чувствительность к регистру в MySQL часто достигается с помощью оператора binary:

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

Это предполагает, что исходное сопоставление двух строк одинаково (что кажется разумным для двух столбцов в одном и том же столбце).таблицу).

0 голосов
/ 24 июня 2018

Чувствительность к регистру или нечувствительность основана на сопоставлении строк, определенных для ваших столбцов. В 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 для более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...