우당탕탕 개발일기

[MSSQL/SSMS] 한글 깨질 때 / 한글 '???'으로 나올 때 본문

What I Learned/SQL

[MSSQL/SSMS] 한글 깨질 때 / 한글 '???'으로 나올 때

rilee 2023. 1. 2. 12:18
728x90

어느날 화면에 한글들이 죄다 '?'로 찍힌다는 이슈가 접수됐다.

SSMS를 확인해보니 SSMS에서도 ??로 출력되고 있었다.

구글링해보니 해당 이슈들이 많아서 쉽게 해결할 수 있을 줄 알았는데 쪼금 어려웠다.

첫번째

select @@LANGUAGE    -- 계정별 기본 언어 확인
sp_defaultlanguage '계정','Korean';    -- 계정 기본언어 한국어로 변경

제일 처음에 계정별 기본 언어가 영어로 되어있어서 

해당 쿼리를 실행시켰지만(실행 후 SSMS 껐다가 다시 켜야 적용됨!) 딱히 상황이 해결되지 않았다.

두번째 

-- 데이터베이스의 데이터 정렬(COLLATION) 확인
SELECT * FROM SYS.DATABASES

해당 쿼리로 조회 데이터베이스의 COLLATION을 확인해보니 

SQL_Latin1_General_CP1_CI_AS로 되어있음을 확인했다.

분명히 SSMS도 Kor버전으로 설치했다고 했고, 기본언어도 한국어로 설정되어있고, 로그인계정 생성시에도 한국어로 선택했는데 왜 저렇게 되어있을까.... 아무튼 저 Collation을 스치듯 봤었던 Korean_Wansung_...로 변경해야하는걸 깨달았다.

 

ALTER DATABASE DB명 SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

ALTER DATABASE DB명 COLLATE Korean_Wansung_CI_AS;

ALTER DATABASE DB명 SET MULTI_USER;

 

데이터베이스의 옵션에서 확인할 수 있는 액세스 제한이 Multi_User로 되어있으면 데이터 정렬을 변경할 수 없대서

Single_User로 변경하는 쿼리문을 돌린 후에 데이터 정렬을 변경하는 쿼리를 돌렸는데 

종속이 어쩌구... 하면서 진짜 너무 많은 에러들이 떴다..ㅠㅠ

구글링해보니 인덱스를 삭제했다가 데이터 정렬 변경 후 다시 설정하면 된다고 쉽게 말하고들 계셨지만..

데이터베이스가 워낙 큰 거였고, 나같은 sql초보가 할 수 있는 일이 아닌 것 같아서 다른 방법을 고민해봐야했다.

세번째(💡)

어떤 방법이든지, 데이터베이스의 Collation(데이터 정렬)을 변경해주는게 해결 방법인 것 같았다.

데이터 정렬을 변경할 수 있는 다른 방법을 찾다가 데이터 베이스를 생성할 때 데이터 정렬을 선택할 수 있는 박스를 발견했다!

저기서 <기본값> 대신 Korean_Wansung_CI_AS를 지정해주었다. 나는 이 방법으로 해결됐다!

 

참고로, Korean_Wansung_CI_AS이란

- Korean : 한국어

- Wansung: 정렬규칙(완성형)

- 대소문자 구분 : CS(구분) / CI(구분안함)

- 악센트 구분 : AS(구분) / AI(구분안함)

을 의미한다고 한다!

 

 

아무래도 한국어를 기본언어설정하면 저 데이터 정렬이 기본값으로 해도 Korean_Wansung으로 변경될텐데 뭔가 중간에서 꼬인것같다... 그래도 쉽게 해결돼서 다행!ㅎㅎ

 

 

 

https://hotinme35.tistory.com/entry/MSSQL-COLLATE-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EC%A0%95%EB%A0%AC-%ED%99%95%EC%9D%B8-%EB%B0%8F-%EB%B3%80%EA%B2%BD

 

[MSSQL] Collation(데이터 정렬) 확인 및 변경

개발자에게 테이블의 데이터를 넣으니 한글이 깨진다는 문의가 왔다.. 확인해보니 DB Server 설정 시 기본 Collation(데이터 정렬) SQL_Latin1_General_CP1_CI_AS 로 되어 있었다 클라우드 환경인 AWS, Azure 등

hotinme35.tistory.com

https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=ej_0109&logNo=221424768276 

 

Korean_Wansung_CI_AI 오류

메시지 5030, 수준 16, 상태 2, 줄 1 작업을 수행하기 위해 데이터베이스를 배타적으로 잠글 수 없습니다. ...

blog.naver.com

https://enoya.tistory.com/4

 

MSSQL 한글 깨짐 (한글이 ???? 으로 표기) 현상 시

MSSQL의 테이블 데이터가 한글일 경우에는 칼럼의 DataType을 nvarchar로 해야된다고 한다.. varchar 와 nvarchar를 비교하자면 varchar 는 영문데이터와 테이블에 설정된 기본 언어 타입을 사용. nvarchar는 유

enoya.tistory.com

 

728x90