❓SQL Server에서 "Collation conflict" 오류 해결하기
1. 문제 상황
최근 Stored Procedure를 실행하던 중 아래와 같은 에러를 만났습니다.
Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Korean_Wansung_CI_AS" in the equal to operation.
무슨 말일까요? 서로 다른 문자 정렬 방식(Collation)을 가진 문자열을 비교하려다 충돌이 발생한 것입니다.
2. Collation이란?
SQL Server에서 Collation(정렬 규칙) 은 문자열 데이터를 비교하거나 정렬할 때 사용하는 문자 집합/비교 규칙입니다.
예를 들어:
- SQL_Latin1_General_CP1_CI_AS: 영어/라틴 문자 기준, 대소문자 구분 안 함
- Korean_Wansung_CI_AS: 한국어 완성형 기준, 대소문자 구분 안 함
이 둘은 서로 다르기 때문에, WHERE, JOIN, =, LIKE 등 비교 연산을 할 경우 충돌이 발생합니다.
3. 간단한 예제로 살펴보기
아래는 두 테이블을 조인하는 예시입니다.
-- 고객 정보 테이블 (Korean_Wansung_CI_AS)
CREATE TABLE Customers (
CustomerID NVARCHAR(50) COLLATE Korean_Wansung_CI_AS,
Name NVARCHAR(100)
);
-- 주문 정보 테이블 (SQL_Latin1_General_CP1_CI_AS)
CREATE TABLE Orders (
CustomerID NVARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS,
OrderID INT
);
-- 조인 시도
SELECT *
FROM Customers C
JOIN Orders O ON C.CustomerID = O.CustomerID;
❌ 위 코드는 Collation 충돌 오류를 발생시킵니다.
4. 임시 해결 방법 – COLLATE 명시적으로 지정하기
-- COLLATE 구문으로 일치시켜 비교
SELECT *
FROM Customers C
JOIN Orders O
ON C.CustomerID COLLATE SQL_Latin1_General_CP1_CI_AS = O.CustomerID;
또는 반대로:
ON C.CustomerID = O.CustomerID COLLATE Korean_Wansung_CI_AS
5. 실전 적용 예시 – Stored Procedure 수정
제가 겪은 실제 사례에선, @aaa_ID 파라미터와 테이블 컬럼 간의 Collation이 달라 오류가 발생했는데요, 다음처럼 COLLATE를 명시해 해결했습니다:
-- 문제 있었던 부분
WHERE A.aaa_ID = @aaa_ID
-- 수정 후
WHERE A.aaa_ID = @aaa_ID COLLATE Korean_Wansung_CI_AS
또한, JOIN이나 EXISTS 비교 조건에서도 마찬가지로 COLLATE를 명시했습니다.
6. 정리
상황 해결법
문자열 비교 시 Collation 충돌 발생 | COLLATE 키워드로 일치시켜 비교 |
Stored Procedure 파라미터 충돌 | 파라미터 정의에 COLLATE 지정 |
근본적 해결 | 테이블 전체의 Collation 통일 (권장) |
🧩 마무리 팁
모든 테이블이나 파라미터에 일관된 Collation을 쓰는 것이 가장 이상적입니다. 하지만 현실적으로 여러 시스템이 섞인 환경에서는 COLLATE 키워드로 예외 처리를 해주는 것이 실용적입니다.
📌 참고 SQL
-- 테이블/컬럼 Collation 확인
SELECT TABLE_NAME, COLUMN_NAME, COLLATION_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE COLLATION_NAME IS NOT NULL
ORDER BY COLLATION_NAME;
참고
https://blog.naver.com/sory1008/223071678680
[MySQL] collation 이란?
Collation 의 의미 character set 은 글자 자체에 대한 모양과 인코딩에 대해 정의해놨다면, collation 은...
blog.naver.com
https://yozm.wishket.com/magazine/detail/2736/
MySQL 콜레이션은 어떻게 동작할까? | 요즘IT
이번 글에서는 MySQL의 콜레이션에 대해 살펴보려고 합니다. 전반적인 개요와 함께 MySQL 8.0에 새롭게 추가된 콜레이션들을 위주로 어떻게 동작하는지, 동작 방식과 주의해야 할 사항을 총 2편에
yozm.wishket.com
'Project > 에러해결' 카테고리의 다른 글
Java UnsupportedOperationException 오류 해결 (1) | 2025.04.24 |
---|---|
Type definition error: [simple type,~~~] (0) | 2025.03.21 |
[ERROR] Module already exists (1) | 2025.02.16 |
[ERROR] com.mongodb.MongoCommandException: Command failed with error 18 (AuthenticationFailed): 'Authentication failed.' (0) | 2024.09.06 |
[ERROR] Gateway와 User-Service 간 네트워크 문제 해결 및 Docker 설정 방법 (0) | 2024.09.03 |