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
- https://docs.microsoft.com/ko-kr/sql/relational-databases/collations/collation-and-unicode-support?view=sql-server-ver15
- https://docs.microsoft.com/ko-kr/sql/relational-databases/collations/view-collation-information?view=sql-server-ver15
- https://chobodba.tistory.com/3
- https://www.sqlshack.com/the-collate-sql-command-overview/
'전체보기 > Database' 카테고리의 다른 글
[MSSQL] DECIMAL 사칙연산 파헤치기 (0) | 2020.10.15 |
---|---|
[MSSQL] Collation 충돌 해결하기 (0) | 2020.06.13 |
[Database]Isolation level 파헤치기 - 서로 다른 isolation level을 가진 transaction들은 어떻게 동작할까? (0) | 2020.03.01 |
[MySQL] Delimiter 란? (0) | 2019.09.10 |
[Database]Transaction과 isolation level (0) | 2019.06.23 |