본문 바로가기

전체보기/Database

[MSSQL] Collation 파헤치기

intro

이번 글에서는 문자 데이터 정렬, Collation에 대하여 살펴보겠습니다.

 

collation은 데이터 정렬, 비교하는 방식을 지정하는 명령어로

collation 설정에 따라 작업 결과가 다르게 나타날 수 있습니다.

 

자세한 설명에 앞서, 다음 쿼리를 통해 우리가 사용하고 있는

collation 설정값을 확인해 보겠습니다.

 

SELECT name, collation_name FROM sys.databases;  

 

위 쿼리문을 실행하면 아래와 같은

( 환경에 따라 값은 다르게 나옵니다. )

결과를 확인할 수 있습니다.

 

  name collation_name
1 master Korean_Wansung_CI_AS
2 sample Korean_Wansung_CI_AS

 

master와 sample은 데이터베이스의 이름 그리고

collation_name은 해당 데이터베이스가 사용하고 있는 collation 설정값입니다.

 

'Korean_Wansung_CI_AS'라는 값은 '한국어 사전 정렬 규칙'을

사용해 데이터를 비교, 정렬한다는 의미입니다.

 

이 외에도 언어에 따라 수많은 값들이 있습니다.

100개가 훨씬 넘는 값들이 존재하기 때문에

이번 글에서 값을 모두 다루지는 않겠습니다.

( 궁금하신 분들은 링크를 참고하시길 바라겠습니다. )

options

위의 'Korean_Wansung_CI_AS'에서 

'_CI_AS' 값은 데이터 정렬 옵션 값(접미사)으로 

해당 값은 '대/소문자 구분 안함, 악센트 구분, 일본어 가나 구분 안 함, 전자/반자 구분 안 함'

이라는 의미를 가지고 있습니다.

 

옵션 값을 간단하게 설명하면,

_CS(Case Sensitive) / _CI(Case Insensitive) : 대소문자를 구분한다 / 구분하지 않는다.

_AS(Accent Sensitive) / _AI(Accent Insensitive) : 악센트를 구분한다 / 구분하지 않는다.

 

이 아래의 값들은 생략을 통해 옵션을 해제할 수 있습니다.

_KS(Kana Sensitive) : 일본어 가나를 구분한다.

_WS(Width Sensitive)  : 전자와 반자를 구분한다

※ 전자는 2Byte를, 반자는 1Byte를 차지하는 글자를 의미합니다.

 

이 외에도 _VSS, _BIN, _BIN2, _UTF8 등과 같은 옵션이 있습니다.

( 더 자세한 옵션 값이 궁금하신 분들은 링크를 참고해주세요. )

Database level

SSMS에서 데이터베이스 오른쪽 마우스 클릭 > 속성 > 일반에 들어가면

위 그림과 같이 해당 데이터베이스의 데이터 정렬값을 확인 할 수 있습니다.

 

위 예시의 데이터 정렬값은 default값으로 해당 값은 다음의 

쿼리를 통해 변경할 수 있습니다.

 

ALTER DATABASE [데이터베이스 이름] COLLATE [데이터 정렬값]

--example
ALTER DATABASE study COLLATE SQL_Latin1_General_CP1_CI_AS

 

데이터베이스를 생성하면서 역시 데이터 정렬값을 설정할 수 있습니다. 

 

CREATE DATABASE [데이터베이스 이름] COLLATE [데이터 정렬값]

--example
CREATE DATABASE collation_sample COLLATE SQL_Latin1_General_CP1_CI_AS

 

Column level

기본적으로 컬럼의 데이터 정렬값은 데이터베이스를 따라갑니다.

하지만 다음 쿼리문을 통해 각 컬럼에

우리가 원하는 데이터 정렬값을 설정하는 것이 가능합니다.

 

CREATE TABLE [테이블 이름] ([컬럼 이름] [문자열 데이터 타입] COLLATE [데이터 정렬값])

--example
CREATE TABLE A (id INT, name VARCHAR(100) COLLATE Korean_Wansung_CI_AS, code VARCHAR(100))

sp_help [테이블 이름]

 

마지막줄의 쿼리문을 통해 테이블의 정보를 조회할 수 있으며

이를 통해 예시로 만든 테이블의 정보를 조회하면

다음과 같은 결과를 받을 수 있습니다.

 

 

여기까지 간단한 collation에 대한 설명이었습니다.

Reference

반응형