В общем, вы не можете сделать это, и используя lower
в коде является безопасный подход, который будет работать для всех видов знаков и языков. Для некоторых языков существуют специализированные сопоставления, которые будут поддерживать ваше сравнение, но могут иметь некоторые сложности сами по себе. Для 'ä' = 'Ä' != 'A'
вы можете использовать utf8_german2_ci
(немецкая телефонная книга, заказывающая). Он будет рассматривать следующие символы как равные в сравнениях:
Ä = Æ = AE
Ö = Œ = OE
Ü = UE
ß = ss
Но сравнение (например =, <, >
) понимается в буквальном смысле: поскольку сверка фактически относится к сортировке, эта сверка имеет странное SideEffect что 'AE' = 'Ä'
, но не 'AE' like 'Ä'
! Это может быть сложнее рассмотреть в вашем коде, чем просто добавить lower
всюду, и может привести к некоторым последствиям для кручения мозга позже. Но если вы можете жить с этим, и вам не нужно поддерживать другие специальные символы, кроме только немецких умляутов (например, 'à'
, 'á'
и 'å'
все равно будут обрабатываться как 'a'
), вы можете попробовать.
Пример:
create table germanumlaut (
word varchar(20) collate utf8_german2_ci
);
insert into germanumlaut (word)
values ('Ä'), ('ä'), ('A'), ('á'), ('AE');
select * from germanumlaut where word = 'A';
-- result: 'A', 'á', as 'á' is not a german umlaut and treated as 'a'
select * from germanumlaut where word = 'Ä';
-- result: 'Ä', 'ä', 'AE', as 'AE' = 'Ä'
select * from germanumlaut where word > 'Ad';
-- result: 'Ä', 'ä', 'AE', as 'Ä' = 'AE'
select * from germanumlaut where word like 'A';
-- result: 'A', 'á'
select * from germanumlaut where word like 'Ä';
-- result: 'Ä', 'ä'
select * from germanumlaut where word like 'A%';
-- result: 'A', 'á', 'AE'
[_This_] (http://mysql.rjweb.org/utf8_collations.html) указывает на то, что Немецкий2, исландский, датский, эстонский, словацкий, и шведский являются единственными utf8 сортировки которые рассматривают 'Ä' как не равные' A'. –