http://www.sqler.com/325753

일전에 모임 했을 때 Collation 이야기가 나왔었는데요.

이에 대해 간단히 이야기해 볼까 합니다.

 

당연히… Collation을 아시는 분들이 많을 텐데요.

 

Collation을 그대로 번역하면 책 페이지 순서입니다.

우리나라 한글로 하면 가나다순 인데요.

이것을 각 나라 언어를 어떤 기준으로 정렬할 지 나타낸 것이라고 보면 되겠군요.

 

한글용어로는 데이터 정렬이라는 용어를 사용합니다.

 

SELECT SERVERPROPERTY(N'Collation')

명령으로 현재 기본 Collation을 확인할 수 있습니다. 

물론 DB마다, Table마다 다른 정렬을 사용할 수 있습니다.

 

보통 Latin1_General_ CI_AS_KI_WI 이런 식으로 되어 있는데요.

 

이것을 나눠서 살펴 보도록 하겠습니다.

 

1.     Latin1_General : 언어구성을 말합니다. 각 나라의 언어를 영문으로 표기하는 부분입니다.

-  한글은 Korean_Wansung (한글 완성형, 완성형/조합형 에 대한 설명은 패스~)

-  중국어는 Chinese_PRC

보통 이런 식입니다.

 

2.     CI : /소문자 구분 부분을 말합니다.

-  CI : Case Insensitive - /소문자를 구분하지 않음을 말합니다.

-  CS : Case Sensitive – /소문자를 구분합니다.

대문자와 소문자가 구분되어 있는 나라가 아니면 CI 를 사용한다고 보시면 됩니다.

, 영어의 A a 를 같은 것으로 볼 것인지 결정하는 것이죠.

CI일 경우 A와 a를 같게 인식합니다.

-- 혹자는 MSSQL이 대소문자 구분을 하지 않아 이상한 DB라는 분이 계시는데,

   이건 MSSQL 특성을 전혀 모르고 하는 이야기이죠. -_- 설정값을 바꾸면 되는데 말이죠.

 

3.     AS : 악센트(성조)에 대한 구분입니다.

-  AI : Accent Insensitive – 악센트를 구분하지 않습니다.

-  AS : Accent Sensitive – 악센트를 구분합니다.

이것을 구분할 경우 'a' ''는 서로 다르게 인식합니다. 

중국어에도 성조가 있듯, 언어의 높낮이를 구분할 경우 AI가 아닌 AS를 사용합니다.

 

4.     KI : 일본어 가나 구분입니다.

-  KI : Kana Insensitive – 가나를 구분하지 않습니다.

-  KS : Kana Sensitive – 가나를 구분합니다.

새삼 일본의 위력(?)을 느끼게 하네요. 가나구분이라니요.

가나란 영어/라틴의 대/소문자 구분과 비슷한 히라가나와 가타가나를 구분함을 의미합니다.

あいうえお 와 アイウエオ를 각각 다른단어로 인식할 지 여부를 결정하는 것이죠.

일본어의 히라가나/가타가나에 대한 상세한 설명은 패스합니다.

 

5.     WS : 전자/반자 구분입니다.

-  WI : Width Insensitive – 전자/반자 구분을 하지 않습니다.

-  WS : Width Sensitive – 전자/반자를 구분합니다.

전자와 반자는 같은 글자라도 2Byte를 차지하는 전자인지, 1Byte를 차지하는 반자인지 구분해 준다는 거죠.

 

예를 들어 보겠습니다.

DECLARE @A NVARCHAR(10)

DECLARE @B NVARCHAR(10)

 

SET @A = N'1234567890'

SET @B = N'01234567890'

 

SELECT CASE WHEN @A = @B THEN '=' ELSE '<>' END

è  결과는 “=”으로 같다고 나옵니다.

    물론 설정하지 않을 경우 DefaultWI이기 때문입니다.

 

l  어느 사이트에 보면 한자의 전자와 반자, 간체 구분 등으로 설명하는데,  조금 슬프네요.-_-

 

MSSQL 한글버젼의 경우 기본값은 Korean_Wansung_CI_AS 입니다.

, “한글완성형_/소문자구분안함_악센트구분함인데요.

우리나라 고어의 경우엔 성조가 있었으나, 현재는 사실상 성조가 없습니다.

그럼에도 불구하고, AS가 기본값인 것은 아이러니입니다.

 

만약 DB마다 Collation이 다르면 서로 JOIN이 되지 않아서 일일이 JOIN Collation을 지정해 줘야 하는 등 여러 가지 제약조건이 따르겠죠?

 

자세한 사항은 아래 내용을 참고하세요.

http://msdn.microsoft.com/ko-kr/library/ms144250.aspx

 

쓸 때에는 몰랐는데,  써 놓고 나니 이상한 데가 많네요. 좀 고쳤어요. -_-

+ Recent posts