collation은 데이터 정렬을 지정하는 방식이다. 즉, SQL Server가 데이터 순서에 맞춰 저장 될때 collation 순서를 따른다.
다음 쿼리를 통해 우리가 사용하고 있는 collation 설정값을 확인할 수 있다.
SELECT name, collation_name FROM sys.databases
또한 SSMS에서 데이터베이스 속성에서 데이터 정렬값을 확인할 수도 있다.
이 collation에 따라 테이블에 한글 데이터가 깨질수도 있고 한글 데이터가 검색이 안될 수도 있다.
sys.fn_helpcollations를 통해 지원하는 collation 리스트를 볼 수 있다.
SELECT * FROM sys.fn_helpcollations()
열거된 collation의 이름을 잘 보면 언어_[C or A or K or W][S or I] 형태로 구성되어 있다.
앞문자 | 뒤문자 | 설명 |
---|---|---|
C | S | 소문자가 대문자보다 먼저 정렬 |
C | I | 대소문자를 구분하지 않고 정렬 |
A | S | 악센트를 구분하여 정렬 |
A | I | 악센트를 구분하지 않고 정렬 |
K | S | 히라가나와 가타카나를 구분하여 정렬 |
K | I | 히라가나와 가타카나를 구분하지 않고 정렬 |
W | S | 전각과 반각 문자를 구분하여 정렬 |
W | I | 전각과 반각 문자를 구분하지 않고 정렬 |
데이터 정렬값은 데이터베이스 생성시 시스템 설정을 따라가며, 각 데이터베이스에서 데이터 정렬값을 설정할 수 있따. 이런 데이터 정렬값은 SSMS 또는 쿼리를 통해 변경할 수 있고 생성하면서도 데이터 정렬값을 설정할 수도 있다.
CREATE DATABASE [데이터베이스 이름] COLLATE [데이터 정렬값]
ALTER DATABASE [데이터베이스 이름] COLLATE [데이터 정렬값]
기본적으로 컬럼의 데이터 정렬값은 데이터베이스를 따라가지만 각 컬럼에 원하는 데이터 정렬값 설정이 가능하다.
CREATE TABLE [테이블 이름] ([컬럼 이름] [문자열 데이터 타입] COLLATE [데이터 정렬값])
시스템 설정의 데이터 정렬 변경은 다음과 같다.
관리자 권한으로 CMD를 시작한다.
Windows\System32로 이동해 다음 명령을 통해 SQL Server 이름을 찾는다.
sc queryex type= service state= all | find /i "SQL Server"
SQL Server 서비스를 중지한다.
SQL Server의 Binn 폴더(sqlserver.exe 파일이 있는 폴더)로 이동해 다음 명령어를 실행한다.
sqlservr -m -T4022 -T3659 -s"NAME OF YOUR INSTANCE" -q"NEW COLLATION NAME"
sqlservr -m -T4022 -T3659 -s"MSSQLSERVER" -q"SQL_Latin1_General_CP1_CI_AI"