IT 이야기/DB

[MSSQL] 데이터베이스 정렬 방식 (COLLATE, COLLATION)

하늘봉 2022. 9. 5. 12:00
반응형

SQL을 사용하다보면 일반적으로 대소문자를 구분하지 않고 작동한다는 것을 알 수 있습니다.

 

왜 그럴까요?

데이터베이스에는 Collation이라는 개념이 있는데

보통 대소문자를 구분하지 않도록 설정 해놓고 SQL을 사용하기 때문입니다.

 

 

1. 정렬 방식 (Collation) 이란

정렬 방식 (Collation)은 지원 언어, 정렬 순서, 대소문자 구분, 악센트 구분 등과 같은 

문자형 데이터에 대한 여러 측면을 포괄하는 특성입니다.

 

다음과 같이 테이블 함수를 사용해서 시스템에서 지원하는 collation 정보를 확인할 수 있습니다.

SELECT name
     , description 
FROM sys.fn_helpcollations();

 

예를 들어 Latin1_General_CI_AS 정렬 방식은 다음과 같은 특징을 갖습니다.

Latin1_General : 일반적인 영어권 문자 정렬, 다른 특별한 정렬방식이 명시적으로 지정되지 않는한 사전 순서가 기본 값
CI : 데이터의 대소문자를 구분하지 않는다. (a=A)
AS : 데이터의 악센트(성조)는 구분한다. (a<>ấ)

 

 

 

2. 정렬 방식 (Collation) 정의, 지정

SQL Server에서는 데이터베이스, 컬럼, 식 수준으로 정렬 방식을 정의할 수 있습니다.

 

 

데이터베이스

사용자 데이터베이스는 COLLATE 절을 사용해서 데이터베이스의 정렬 방식을 지정할 수 있습니다.

ALTER DATABASE TestDB COLLATE Latin1_General_CI_AS
 
그리고 지정된 데이터베이스의 정렬 방식은 아래와 같은 방식들로 확인 할 수 있습니다.

1. 쿼리문으로 확인

SELECT SERVERPROPERTY('collation');

 

2. SSMS 툴로 확인

Database > Properties > Server Collation

 

컬럼 

컬럼을 정의할 때 COLLATE 절을 이용해서 컬럼의 정렬 방식을 명시적으로 지정할 수 있습니다.

이를 생략하면 기본 값으로 데이터베이스의 정렬 방식을 따르게 됩니다.

 

-- 한글완성형 정렬 방식을 따르도록 지정
ALTER TABLE TestTable
ALTER COLUMN testcolumn VARCHAR(50) COLLATE Korean_Wansung_CI_AI;

 

식(쿼리)

식의 정렬 방식을 변경할 때에도 COLLATE 절을 사용할 수 있습니다. 

데이터베이스, 컬럼에 대소문자를 구분하지 않도록 설정되어 있더라도

아래의 쿼리처럼 사용한다면 대소문자를 구분할 수 있습니다.

SELECT empid
     , firstname
     , lastname
FROM dbo.Employees
WHERE lastname COLLATE Latin1_General_CS_AS = 'terry';

 

이렇게 데이터베이스의 정렬 방식(Collation)과 확인 방법과 지정 방법에 대해서 알아봤습니다.

반응형