기업 인턴 중

기업 인턴 NVARCHAR, VARCHAR

Vagins 2022. 3. 31. 13:16

22.03.31

오랜만에 글을 씁니다. 정보처리기사랑 친구랑 만드는 프로젝트, 기업인턴을 병행하다보니 블로그 관리를 못했습니다. 

최근 정말 바빴습니다.

 

 

오늘은 기업인턴 중 db에서 암호화된 값을 convert로 가져오는 과정에서 발생한 오류를 정리해보겠습니다.

글자 깨짐.. (한국어, 중국어도 깨짐..)

위 사진처럼 값이 다 깨져서 왔습니다.. Controller에서 찍어봤는데도 깨지더라구요

그래서 인코딩 문제이겠거니 했습니다

 

직접 쿼리내에서 인코딩 방식을 변경하려했지만

(값을 binary로 바꿔준 뒤 다시 utf8로 바꾸는 방법)

성능이 너무 느려진다길래 실서버에서 장애 생길까봐 다른 방안을 찾기로 했습니다.

 

(CONVERT도 느림..)

암호화된 값을 CONVERT(VARCHAR(MAX), DecryptbyKey) 로 가져오고 있길래

CONVERT, DecryptbyKey 에 대해서 공부하다가 

 

"NVARCHAR로 한번 바꿔볼까?" 해서 바꿔봤더니...

한글 중국어 인코딩이 필요한 컬럼을 NVARCHAR로 바꿔 봄

해결..

해결 됐당

 

왜 해결되는지 알고 싶어서 이것 저것 링크타고 찾아봤습니다.

 

 

★ VARCHAR(MAX)의 단점 및 SQL Server의 NVARCHAR

 

https://mozi.tistory.com/326

 

[MSSQL] VARCHAR(MAX) vs VARCHAR(N) / VARCHAR(MAX) 의 단점

VARCHAR(MAX) 와 NVARCHAR(MAX) 의 단점 VARCHAR 와 NVARCHAR 는 유니코드 라는 점에서 다르기 때문에 VARCHAR 로 설명하겠습니다. VARCHAR(N) 컬럼에 데이터를 저장할 때에는 물리적으로 같은 방식으로 저장됩니..

mozi.tistory.com

https://techblog.woowahan.com/2605/

 

SQL Server 에게 String 이란? (NVARCHAR 인가 VARCHAR 인가) | 우아한형제들 기술블로그

{{item.name}} SQL Server JDBC Driver 를 사용하면서 배운, 그리고 주의해야 할 특징 안녕하세요. 비즈상품개발팀에서 광고시스템을 개발하고 있는 김승영입니다. 현재 광고시스템의 일부분이 Spring Boot /

techblog.woowahan.com

  • SQL Server JDBC Driver 는 String type 의 pamameter 를 기본적으로 NVARCHAR 로 매핑한다는 사실을 반드시 기억하고 사용하자
  • 그렇기 때문에, String type 의 parameter 를 기본 VARCHAR 로 매핑하고 싶다면 또는 해야한다면, JDBC URL 에 sendStringParametersAsUnicode=false 를 추가하자
  • Hibernate / JPA 기반이라면 NVARCHAR 컬럼을 매핑한 필드에 @Nationalized를 사용하자

 

 

SQL Server JDBC Driver 는 String type 의 pamameter 를 기본적으로 NVARCHAR 로 매핑한다는 사실을 배웠습니다.