본문 바로가기

전체보기/Database

[MSSQL] Collation 충돌 해결하기

intro

이번 글에서 collation 충돌이 발생하는 원인과

해결 방법에 대해 다뤄보겠습니다.

 

이번 글에서는 collation에 대한 설명은 따로 하지 않겠습니다.

collation에 대해 알고싶으신 분은

다음 링크를 참고해 주시기 바랍니다.

 

설명을 위해 다음과 같은 두 테이블을 정의하겠습니다.

 

CREATE TABLE korean (id INT, name VARCHAR(100) COLLATE Korean_Wansung_CI_AS)

CREATE TABLE american (id INT, name VARCHAR(100) COLLATE Latin1_General_100_CI_AS_SC)

 

하나의 테이블 collation 값은 Korean_Wansung_CI_AS(한국어 사전 기준)으로

또 다른 하나의 테이블은 Latin1_General_100_CI_AS_SC(Windows 데이터 정렬)으로 설정하였습니다.

 

SELECT * FROM study.dbo.korean k INNER JOIN study.dbo.american a
	ON k.id = a.id and k.name = a.name

 

위 두 테이블에 대하여 JOIN을 수행하면

다음과 같은 에러가 발생합니다.

 

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

 

위 에러는 name을 비교하는 과정에서

두 테이블의 비교하는 기준(collation 값)이 달라 발생하는 문제입니다.

 

위 문제를 해결하는 방법은 간단합니다.

collation 설정을 통일시키는 것 입니다.

 

다음 쿼리문을 통해 collation 값을 조정할 수 있습니다.

 

SELECT * FROM study.dbo.korean k INNER JOIN study.dbo.american a
	ON k.id = a.id and k.name = a.name COLLATE Korean_Wansung_CI_AS

--혹은

SELECT * FROM study.dbo.korean k INNER JOIN study.dbo.american a
	ON k.id = a.id and k.name COLLATE Latin1_General_100_CI_AS_SC = a.name

 

그럼 여기까지 간단하게 collation 충돌 문제를 해결할 수 있는 방법이었습니다.

반응형