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)과 확인 방법과 지정 방법에 대해서 알아봤습니다.
'IT 이야기 > DB' 카테고리의 다른 글
[MSSQL] INSERT문 다양한 사용법 (0) | 2022.09.07 |
---|---|
[MSSQL] 테이블 및 컬럼 디스크립션(Description) 추가, 수정, 조회 (0) | 2022.09.06 |
[DB 기술면접] 인덱스(index)란 무엇인가, 생성 방법과 원리 (0) | 2022.09.04 |
SQLP 응시자격 (4년제 대학 졸업했으면 바로 응시가능 합니다.) (0) | 2022.09.03 |
SQLP 자격증의 가치와 공부하는 이유 (3) | 2022.09.02 |