[MSSQL]SQL_Latin1_General_CP1_CI_AS\"과(와) \"Korean_Wansung_CI_AS\" 간의 데이터 정렬 충돌을 해결할 수 없습니다.
오류 내역
SQL_Latin1_General_CP1_CI_AS\"과(와) \"Korean_Wansung_CI_AS\" 간의 데이터 정렬 충돌을 해결할 수 없습니다.
{"code":500,"name":"Internal Server Error","message":"\n### Error querying database.
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: equal to 작업에서의
\"SQL_Latin1_General_CP1_CI_AS\"과(와) \"Korean_Wansung_CI_AS\" 간의 데이터 정렬 충돌을 해결할 수 없습니다.
Cause: com.microsoft.sqlserver.jdbc.SQLServerException: equal to 작업에서의
\"SQL_Latin1_General_CP1_CI_AS\"과(와) \"Korean_Wansung_CI_AS\" 간의 데이터 정렬 충돌을 해결할 수 없습니다.\n;
uncategorized SQLException; SQL state [S0009]; error code [468]; equal to 작업에서의
\"SQL_Latin1_General_CP1_CI_AS\"과(와) \"Korean_Wansung_CI_AS\" 간의 데이터 정렬 충돌을 해결할 수 없습니다."
개발서버와 운영서버를 분리해서 작업하면서, 한 곳에서는 되는데 다른 곳에서는 안 되는 경험이 자주 발생합니다....
잘 되던 API 서비스가 갑자기 다른 곳에서 안 되고 처음 보는 오류에 당황스럽게 원인을 찾아보았습니다.
오류 문구에도 친절하게 나타나 있는데 생소한 단어들에 당황했거든요 ...
운영서버의 ID 컬럼의 Collation 은 Korean_Wansung_CI_AS 입니다.
개발서버의 ID 컬럼의 Collation 은 SQL_Latin1_General_CP1_CI_AS 입니다.
오류 설명
Korean_Wansung_CI_AS와 SQL_Latin1_General_CP1_CI_AS는 SQL Server에서 사용하는 두 가지 다른 정렬 규칙입니다.
이들의 주요 차이는 아래와 같습니다.
1. 언어 및 문자 집합
- Korean_Wansung_CI_AS: 한국어에 최적화된 정렬 규칙으로, 한글과 한글 조합 문자에 대한 지원이 포함되어있습니다.
- SQL_Latin1_General_CP1_CI_AS: 라틴 문자 기반의 언어(영어, 스페인어 등)에 최적화된 정렬 규칙입니다. 주로 영어와 같은 서양 언어에 사용됩니다.
2. 대소문자 구분
두 정렬 규칙 모두 "CI(Case Insensitive)" 로 표시되어 있어 대소문자를 구분하지 않습니다.
한국어 데이터를 다룰 때는 Korean_Wansung_CI_AS를 사용하는 것이 적합하며, 영어 데이터를 다룰 때는 SQL_Latin1_General_CP1_CI_AS가 일반적으로 사용됩니다.
이러한 차이로 인해 두 정렬 규칙을 혼합하여 사용할 경우, 데이터 비교 및 정렬에서 충돌이 발생할 수 있습니다.
오류 해결
제가 사용하는 ID 는 알파벳으로 된 ID 데이터들이기 때문에 Korean_Wansung_CI_AS -> SQL_Latin1_General_CP1_CI_AS 으로 통일화 해주었습니다.