MSSQL 대소문자 구분 (feat : GROUP BY)
업무를 보다가, 뭐가 잘 안된다는 연락을 받고 확인을 해봤습니다.
ADDRESS 테이블에서 province로 groupby를 한 결과 입니다.
아래 쿼리와 같이 province로 group by를 쿼리로 하게 되면 총 7개의 그룹이 생깁니다.
그러나 실제 프로그램에서는 8개의 그룹이 생긴다고 해서.. 도대체 왜???? 이런 생각이 들었고 소스 코드를 보고 디버깅을 해봤습니다.
결과를 보니,.. 8개가 딱..... 그리고 확인을 해보니, province-3과 Province-3 이렇게.. 두개로 나뉘어 있었습니다.
아... ㅎㅎㅎ 위에는 자바 Stream의 Groupingby를 사용하여 grouping한 결과 입니다.
쿼리 결과물을 자세히 보면.. 대소문자가 막.. 섞여 있습니다.
즉 province-3과 Province-3이 MSSQL에서는 함께 group by 되었던 것 입니다. 하하하..
나름 찾아보니.. MSSQL은 오라클과 다르게 기본적으로 대소문자를 구분하지 않는다고 하네요... ㅠㅠ 뭐 이제라도 알았으니 된거겠죠??
대소문자를 구분하는 쿼리입니다.
select PROVINCE COLLATE Korean_Wansung_CS_AS,count(*) from ADDRESS
group by PROVINCE COLLATE Korean_Wansung_CS_AS;
아주 잘 구분하여.. 그룹을 구분해 주네요...
진작 알았더라면... ORACLE만 사용하다가 실무에서 MSSQL을 사용하려니 어렵네요 ㅠㅠ
COLLATION Korean_Wansung_CS_AS
-> CI : 대소문자 구분 안함, CS : 대소문자 구분
-> AI : 액센트 구분 안함, AS : 액센트 구분
이런식으로 Korean_Wansung 뒤에 설정을 할 수 있습니다. Korean_Wansung은 언어라고 하네요.
SELECT * FROM ADDRESS WHERE PROVINCE COLLATE Korean_Wansung_CS_AS ='province-3';
이런식으로도 활용할 수 있을 것 같습니다.