일반적으로 코드에서 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) 그 german2, 아이슬란드 어, 덴마크어, 에스토니아어, 슬로바키아어, 지적 스웨덴 유일한 UTF8 정렬되어 'Ä'를'A'와 같지 않은 것으로 간주합니다. –