본문 바로가기

백앤드/Etc

[MSSQL] SQL Server 데이터베이스 인코딩 설정

반응형

회사에서 Oracle, MySQL을 연동하고 마지막으로 MSSQL을 작업하는 중에 이런 에러가 발생했습니다.

흠... 한글이 깨지네, 인코딩 설정 때문인지...가 디비 생성할 때 UTF8로 안했나봅니다. 그래서 직접 확인을 해보았습니다.

 

예상대로 Latin 으로 되어있습니다. 자 그럼 이걸 한글이 지원되도록 인코딩을 변경해보겠습니다.

인코딩 확인하는 쿼리는 아래 복사 붙여넣기해서 사용하시면 됩니다.

use oingdaddyDB;
Select name, database_id, collation_name From sys.databases;

 

해결 방법은 시도해본 순서대로 아래에 작성해봅니다.

 

Solution 1. 데이터베이스 인코딩을 바꿔보자.

use oingdaddyDB;
                                       
ALTER DATABASE oingdaddyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 
GO 

ALTER DATABASE oingdaddyDB COLLATE Korean_Wansung_CI_AS; 
GO 

ALTER DATABASE oingdaddyDB  SET MULTI_USER; 
GO

하지만.. 필자의 경우 데이터를 삭제하고 다시 밀어넣어봤으나 똑같이 깨졌습니다. ㅠㅠ

 

Solution 2. DataType 이 유니코드 지원을 위한 데이터형이 있다?

MSSQL의 테이블 데이터가 한글인 경우 컬럼의 DataType을 nvarchar로 해야된다고 합니다.

그런데 그럼 varchar와 nvarchar의 차이점을 정말 간단하게 요약설명을 하면 다음과 같습니다.

 

varchar : 영문 데이터를 사용하거나 또는 테이블에 설정된 기본 언어 타입을 사용하는 데이터 타입

nvarchar : 데이터를 넣을 때, 한글등 유니코드 지원을 위한 데이터 타입

 

대신 varchar 에 비해 nvarchar가 디스크를 2배 정도 차지한다. 그만한 이유가 있는게 영문은 1byte이지만 유니코드는 2~4byte라는 전공 지식만 알고 있어도 금방 이해할 수 있을겁니다.

 

그래서 기존에 생성한 테이블 다 지우고, 테이블 생성부터 새로 시작했는데 결론은 이렇게해결했다.

CREATE TABLE [SF1_DIC_MAPPINGTABLE]
(
    [KEYWORD_ID]    VARCHAR(255) PRIMARY KEY NOT NULL,
    [DIC_NAME]      NVARCHAR(255),
    [FIELD]         NVARCHAR(255),
    [NEW_VALUE]     NVARCHAR(4000),
    [OLD_VALUE]     NVARCHAR(4000),
    [START_WORD]    NVARCHAR(255),
    [SYNC_DELETE]   SMALLINT,
    [SYNC_GENERATE] SMALLINT,
    [SYS_CREATE_DT] DATETIME2(6),
    [SYS_MODIFY_DT] DATETIME2(6)
    )
;
반응형