DBAtlas · 데이터베이스 운영 아틀라스

468: Cannot resolve the collation conflict

SQL Server

의미

작업(JOIN, UNION, WHERE 비교 또는 동등 비교)에서 collation이 다른 두 문자열 표현식이 만나 SQL Server가 어떤 collation을 적용할지 결정할 수 없었다. 모호성 때문에 작업이 취소되었다.

원인

비교하는 컬럼이 서로 다른 collation으로 정의되어 있다. 데이터베이스 collation이 서버/tempdb collation과 다르거나, collation이 다른 데이터베이스의 테이블을 조인할 때 가장 흔하다. 임시 테이블(tempdb collation)을 영구 테이블과 조인하는 것이 전형적인 트리거다.

해결 방법

비교에 명시적 collation을 지정한다: ... WHERE a.col = b.col COLLATE DATABASE_DEFAULT (또는 구체적인 collation 이름). 임시 테이블 컬럼을 생성할 때 COLLATE DATABASE_DEFAULT를 사용한다. 영구 조치로 영향을 받는 컬럼/데이터베이스를 하나의 일관된 collation으로 맞춘다. tempdb와의 불일치가 잦다면 DATABASE_DEFAULT가 가장 실용적인 해결책이다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목