2009-10-31 6 views

답변

5

MySQL의 문자열은 character set and a collation입니다. Utf8은 문자 집합이며 utf8_bin은 해당 문자 집합 중 하나입니다. 데이터 정렬은 MySQL이 문자열을 비교하는 방법을 결정합니다.

select case when 'test' = 'TEST' collate utf8_bin 
     then 'true' else 'false' end, 
     case when 'test' = 'TEST' collate utf8_roman_ci 
     then 'true' else 'false' end 

첫 번째는 대소 문자를 구분하는의 utf8_bin 데이터 정렬을 사용

예를 들어, 여기에 UTF8 문자열을 비교하는 두 가지 방법이 있습니다. 두 번째는 대소 문자를 구분하지 않는 utf8_roman_ci를 사용합니다.

모든 문자 집합 및 정렬의 목록을 찾을 수 있습니다 :

show character set 
show collation 

latin1_swedish_ci는 (MySQL은 원래 스웨덴에서 개발 된) 기본 데이터 정렬이며, 이것은 또한 MariaDB 마찬가지입니다.

3

문자 세트는 문자 및 인코딩의 집합입니다. 데이터 정렬은 문자 집합의 문자 비교를위한 규칙 집합입니다.

자세한 내용은 MySQL Reference Manual에서 확인할 수 있습니다.

+1

@David : 참조 설명서 URL을 게시하기 전에 : +1 –

7

문자열을 비교할 때 데이터 정렬이 사용됩니다 (예 : 그들을 분류하기 위해. 예를 들어, 스웨덴어의 경우 "Ä"는 "Z"뒤에옵니다.하지만 독일어의 경우 "AE"처럼 취급됩니다. 따라서 데이터 정렬에 따라 문자열이 다르게 정렬됩니다.

MySQL은 스웨덴 출신이므로 스웨덴어가 기본값입니다.

+1

@balpha : 좋은 설명 : P –

3

왜? 기본값은 무엇입니까?

latin1_swedish_ci은 MySQL AB 회사가 스웨덴에서 온 것이기 때문에 기본값입니다.

일반적으로이 정렬은 ISO-8859-1 (서유럽 어) 문자 세트를 사용하는 너무 까다로운 응용 프로그램의 경우 적절한 기본값으로 간주됩니다. 그것은 비해 미미 대부분은 구별한다 :

'A'='Ã' -- 1 

그러나 그것은 스웨덴어로 특정 몇 가지 단점이 있나요 있다고 한 : 별도의 문자로 간주됩니다 ö, ø, å, æ을 (그리고 äæ와 같은 것으로 간주됩니다); yü과 같은 문자로 간주됩니다.

'['='å' -- 1, huh? 
'd'='ð' -- 1, tsk. eth is nothing to do with d 

더의 gory details를 참조하십시오 : 그것은 또한 단지 잘못로 스웨덴어 너무 많은 수없는 몇 가지 기능을 가지고 있습니다.

latin1_german_ci은 분음 기호에 관계없이 문자를 일치 시키려면 더 나은 조합입니다. 그렇지 않은 경우 latin1_general_ci이 더 나은 조합입니다. 대/소문자를 구분하지 않고 모든 문자를 고유하게 만들려면 latin1_general_cs으로 이동하십시오.

물론 요즘은 latin1을 기반으로하는 데이터 대신 utf8_ 데이터 정렬 중 하나를 사용하고 싶을 것입니다.