본문 바로가기

▣ DB ▣/◈ MS-SQL ◈

[MSSQL][ERROR] Collation 충돌 ( Korean_Wansung_CI_AS,SQL_Latin1_General_CP1_CI_AS )

[ERROR] Collation 충돌 ( Korean_Wansung_CI_AS,SQL_Latin1_General_CP1_CI_AS )

 

Collation : SQL Server의 기본 데이터 정렬을 설정하는 옵션

 

Collation 종류 보기 : SELECT * FROM ::fn_helpcollations()

 

1. Collation 확인

 

< DB Collation >

SELECT SERVERPROPERTY('collation')

 

< DB Collation 리스트 >

SELECT name, collation_name FROM sys.databases;

 

< Column Collation 리스트 >

SELECT name, collation_name FROM sys.columns

 

2. Collation 변경

 

< DB Collation 변경 >

  1. ALTER DATABASE CollateDb   
  2.     COLLATE Korean_Wansung_CI_AI   
  3. GO   

- Table Column Collation 이 다른 것이면 "칼럼 'xxx'는 데이터베이스 데이타 정렬에 종속되어 있습니다." 라는 메시지 발생 가능

 

< Table Column Collation 변경 >

  1. ALTER TABLE 테이블명  
  2. ALTER COLUMN 칼럼명 VARCHAR(50) COLLATE Korean_Wansung_CI_AI   
  3. GO   

 

- 인덱스, CHECK 제약조건, Foreign Key 제약조건, 계산된열 등의 Column은 변경 불가

  따라서 PK 제거 -> Collation 변경 -> PK 재생성 으로 처리

 

3. Collation 이 맞지 않는 경우 오류

 

- 두 테이블간 Collation 이 맞지 않을 때 발생 ( 예: DB1 과 TempDB 안의 테이블간의 조인시 Collation 이 틀려 발생한 에러 )

 

System.Data.SqlClient.SqlException: equal to 작업에서의 "Korean_Wansung_CI_AS"과(와) "SQL_Latin1_General_CP1_CI_AS" 간의 데이터 정렬 충돌을 해결할 수 없습니다. 



원본 : http://rocabilly.tistory.com/53