본문 바로가기
Work/DataBase

[MSSQL] MSSQL 인코딩 조회 , DB, Table collation 조회, 변경

MSSQL에서는 인코딩, charset을 Collation이라 부르고, 컬럼명을 가지며, 조회한다 

MSSQL에서는 Korean_Wansung_CI_AI 와 같은 다른이름의 인코딩이 쓰여있는데,

 

 

Korean : 한국어

Wansung : 정렬 규칙(완성형)

CI : Case-Insensitive : 대소문자 구분

AI : Accent-Insensitive : 악센트 구분

 

  구분 구분안함
대소문자 CS CI
악센트 AS AI

 

기본적으로 같은 Collate 형식을 가진 칼럼끼리 비교 연산 시 문제 되지 않지만

서로 다른 Collate 형식을 가진 칼럼끼리 비교를 하면 데이터 충돌 에러가 발생한다.

 

1.  DBMS 언어셋

-- DB 언어
Select @@LANGUAGE

초기설치 언어셋은 변경하기 어렵다.

 

 

 

 

 

2. DB Collation

DB Collation 조회

-- DB collation(인코딩) 조회
Select name, database_id, collation_name From sys.databases;

DB마다 Collation을 가지고있으며, 해당 DB Collation을 따라 Table Collation이 정해진다.

 

DB Collation 변경은 아래와 같이 한다.

-- DB collation(인코딩) 변경
ALTER DATABASE 데이터베이스명 COLLATE Korean_Wansung_CI_AI GO

 

 

 

 

3. Table Collation

MSSQL에서 Table 자체에 Collation은 없지만, Table 스키마에 기술된 컬럼들마다 Colltion을 갖습니다. 

 

해당 DB에 모든 Table Column Collation 조회

--해당 DB에 테이블 전체 collation(인코딩) 조회
SELECT t.name TableName, c.name ColumnName, collation_name  
FROM sys.columns c  
inner join sys.tables t on c.object_id = t.object_id;  

 

특정 Table Column Colltion 조회

-- 테이블별 컬럼 collation(인코딩) 조회
SELECT COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH 
FROM INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = '테이블명'

 

특정 Table Column Colltion 변경

-- 테이블별 컬럼 collation(인코딩) 변경
ALTER TABLE 테이블명
ALTER COLUMN 컬럼명 VARCHAR(50) COLLATE Korean_Wansung_CI_AI
GO