기본적으로 MSSQL에서 대소문자 구분이 안됩니다.
이게 ORACLE과 의 차이라고 볼 수 있습니다.
그래서 TABLE 생성 시 칼럼에 설정이 필요합니다~
그리고 SQL Server(=MSSQL)를 사용하다 보면 COLLATE Latin1_General_CI_AS와 같은 정렬 방식이 종종 등장합니다.
SELECT name
, description
FROM sys.fn_helpcollations();
🔍 1. 정렬 방식(Collation)이란?
정렬 방식(Collation)은 데이터베이스에서 문자 데이터를 정렬하고 비교하는 규칙을 정의하는 설정입니다.
예를 들어, a와 A를 동일하게 볼지 다르게 볼지, á와 a를 동일하게 취급할지 등을 결정합니다.
MSSQL에서는 데이터베이스, 테이블, 열(Column) 단위로 Collation을 설정할 수 있으며, 비교 시에는 컬럼의 Collation에 따라 정렬 및 조건문의 결과가 달라질 수 있습니다
🧠 2. Latin1_General_CI_AS 구성 해석
Latin1_General_CI_AS는 MSSQL에서 매우 일반적으로 사용되는 Collation입니다. 각 구성 요소를 하나씩 해석해보면 다음과 같습니다.
Latin1_General | 문자 집합 및 언어 | 영어(라틴계열 언어)를 기준으로 한 정렬 방식입니다. |
CI | Case Insensitive | 대소문자를 구분하지 않습니다. 예: 'A' = 'a' |
AS | Accent Sensitive | 악센트를 구분합니다. 예: 'a' ≠ 'ấ', 'e' ≠ 'é' |
💡 3. 예시로 이해하는 Latin1_General_CI_AS
✅ 예제 1: 대소문자 비교 (CI)
SELECT CASE WHEN 'Apple' = 'apple' THEN '같음' ELSE '다름' END -- 결과: 같음 (CI, 대소문자 구분 안 함)
✅ 예제 2: 악센트 비교 (AS)
SELECT CASE WHEN 'a' = 'ấ' THEN '같음' ELSE '다름' END -- 결과: 다름 (AS, 악센트 구분함)
🧩 4. 그럼 다른 Collation은?
Latin1_General_CS_AS | O (Case Sensitive) | O (Accent Sensitive) | 'A' ≠ 'a', 'a' ≠ 'ấ' |
Latin1_General_CI_AI | X | X | 'A' = 'a', 'a' = 'ấ' |
Korean_Wansung_CI_AS | X | O | 한글 정렬을 고려한 한국어용 설정 |
🔧 5. 내 테이블/DB의 정렬 방식 확인하기
데이터베이스의 Collation 확인
SELECT name, collation_name FROM sys.databases WHERE name = '내DB명'
특정 컬럼의 Collation 확인
SELECT name, collation_name FROM sys.columns WHERE object_id = OBJECT_ID('테이블명')
🚨 6. 정렬 방식이 다를 때 생기는 문제
컬럼 간 또는 변수와 컬럼 간 Collation이 다르면 오류가 발생합니다.
예시:
SELECT * FROM A JOIN B ON A.name = B.name
-- 오류: "Cannot resolve collation conflict between..."
해결 방법:
-- 통일된 Collation으로 강제 변환 O
N A.name COLLATE Latin1_General_CI_AS = B.name COLLATE Latin1_General_CI_AS
✅ 마무리
- Latin1_General_CI_AS는 MSSQL에서 가장 많이 쓰이는 기본 정렬 방식입니다.
- 대소문자는 무시하지만(CI), 악센트는 구분(AS)합니다.
- 다국어 또는 한글 정렬이 필요한 경우 Korean_Wansung_CI_AS 등을 고려해야 할 수도 있습니다.
이 Collation을 제대로 이해하고 활용하면, 문자열 비교 및 정렬 문제로 발생하는 오류를 미연에 방지할 수 있습니다.
- 참고용으로 MS 공식 문서 URL
https://learn.microsoft.com/ko-kr/sql/t-sql/statements/collations?view=sql-server-ver16
COLLATE(Transact-SQL) - SQL Server
COLLATE 문은 데이터베이스 또는 테이블 열의 데이터 정렬을 설정하거나 SQL Database 엔진에서 데이터 정렬을 문자열 식으로 캐스팅합니다.
learn.microsoft.com
'Database > MSSQL' 카테고리의 다른 글
[MSSQL] MSSQL PARSENAME 함수 (MSSQL 전용) (0) | 2025.05.30 |
---|
댓글