체인의정석

Mssql DBeaver연결 후 utf-8 적용 테스트 본문

개발/database

Mssql DBeaver연결 후 utf-8 적용 테스트

체인의정석 2021. 8. 17. 17:52
728x90
반응형

도커에서 띄운 SQLserver 에서 DB 접속은 다음과 같이 하였다.

유저네임 같은 경우 블로그에 검색하다보면 username이 sa로 되어 있는 경우가 많아서 기본값이 되어 있는 sa로 하면 될수도 있다. 처음에 설치를 할 때 비밀번호를 정하는 부분에서 어떤 명령어를 입력했느냐에 따라서 이름과 비밀번호가 갈리게 된다. 비밀번호의 경우 영문자 숫자 특수문자 조합에 길이 제한까지 있기 때문에 잘 입력을 해줬는지 체크가 필요하다. 또 포트바인딩도 되어 있는지 체크를 하고 넘어가도록 하자!

 

오라클 같은 경우 테이블 검색을 통해 접근은 되지만 툴에서는 직접 눌러서 인식이 안될 만큼 깊은 레벨에 있었지만 mssql같은 경우 쉽게 접근할 수 있었다.

insert 구문의 경우 테이블이름에는 "" 가 안들어간다는 점에서 오라클과 달랐다.

insert into 테이블이름 ("칼럼1","칼럼2") values ("값1","값2);

 

다른 DB는 한국어가 잘 들어갔는데 여기서는 한국어가 잘 들어가지 않음이 확인되었다.

한국어가 아닌 "??" 라는 값이 입력되었다.

 

이를 해결하는 방법으로 default language를 한국어로 바꾸는 방법이 있었지만 실제로는 여러 국가의 언어를 모두 포함해야 하기 때문에, 다른 언어도 포함하는 방법을 찾아보았다.

https://docs.microsoft.com/en-us/sql/t-sql/statements/set-language-transact-sql?view=sql-server-ver15 

 

SET LANGUAGE (Transact-SQL) - SQL Server

SET LANGUAGE (Transact-SQL)

docs.microsoft.com

https://newbedev.com/how-to-use-utf-8-collation-in-sql-server-database

 

Programming tutorials | Newbedev

Checkout new tutorials and guides for programming languages Javascript, Python, Java, Golang, C++, PHP

newbedev.com

보아하니 2019년도 버전에서 nvarchar를 쓸때는 utf8이 지원되는것 같다. 현재 버전에서 안되는 이유가 2019년도 이전 버전일 수도 있겠다는 생각이 들었다.

 

일단 확인 한 방법 한가지는 Values 앞에 N을 붙이는 것이였다.

 

insert into 테이블이름 ("칼럼1", "칼럼2") VALUES (N'값1',N'값2)

이런식으로 insert 문을 바꾸는 방법이 있었다.

 

하지만 이렇게하면 api를 바꾸어 주어야 한다. 하나의 백엔드 시스템에서 여러 DB를 지원하는 구조이기 때문에 DB자체를 수정하여 영문과 한국어가 같이 들어가게 만들어야 했다.

 

https://docs.genesys.com/Documentation/OU/latest/Dep/UTF8Support

 

Documentation:OU:Dep:UTF8Support:8.1.5 - Genesys Documentation

 

docs.genesys.com

한참을 헤매다가 위 사이트에서 collation 발견! 찾아보면 한국어로만 바꾸는게 있고, 영문에 한국어가 포함된 경우를 찾기가 힘들었는데 이것저것 다해보다가 발견하였다.

Latin1_general_100_CI_AS_KS_WS_SC_UTF-8

이 부분이 오타이고 사실 들어가야 하는 값은

Latin1_general_100_CI_AS_KS_WS_SC_UTF8

이였다. 명령어를 - 빼고 실행하면 실제로 들어가는값에는 -가 들어가 있는것을 확인할 수 있었다.

CREATE TABLE 테이블이름 (
	칼럼이름 nvarchar(MAX) COLLATE Latin1_general_100_CI_AS_KS_WS_SC_UTF8 DEFAULT NULL
);

이렇게 실행하고 DBeaver에서 확인해 보면,

이렇게 들어간걸 볼 수 있었다. 다른 Collation은 한국어를 지원하지 않았다.

하지만 insert 문에서 N이 빠지는 경우, 역시 한국어 지원이 되지 않았다.

 

마찬가지로 collation을 하지 않아도 N이 들어간 경우 한국어 지원이 되는것을 확인하였다.

 

 

 

 

728x90
반응형
Comments