반응형
회사에서 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)
)
;
반응형
'백앤드 > Etc' 카테고리의 다른 글
[MYSQL] Windows에서 Docker를 사용해서 MySQL 설치하기 (0) | 2023.02.10 |
---|---|
[MSSQL] Windows에서 Docker를 사용해서 SQL Server 설치하기 (0) | 2023.02.09 |
[GitLab] GitLab에서 CI/CD 설정하기 - GitLab 설정편 #3 (0) | 2022.05.20 |
[GitLab] GitLab에서 CI/CD 설정하기 - 서버 설정편 #2 (0) | 2022.05.20 |
[GitLab] GitLab에서 CI/CD 설정하기 - 서버 설정편 #1 (0) | 2022.05.19 |