varchar / nvarchar 차이 0 7 2,798

by 한번사는인생 [SQLServer] [2022.09.07 11:33:25]


테이블 설계할 때,

저는 내용에 한글이 포함되면 nvarchar로

영어 숫자로 이루어진 내용이라면 varchar로 사용합니다.

언제부터가 이런 선입견이 생겨서 해당 내용으로 테이블 설계를 했는데.

아시는 개발자는 그냥 웬만하면 다 varchar로 설계하신다고 하네요.

영어 숫자는 1byte. 한글은 2byte를 차지해서 제가 저렇게 한거 같은데, 제가 틀린건가요?

by 우리집아찌 [2022.09.07 14:44:01]

저도 문자는거의 VARCHAR로 설계하긴하는데. 그렇다고 NVARCHAR도 틀린것은 아니지요.

오라클 경우는 JOIN 시 DATA TYPE이 틀리면 문제 (INIDEX 활용)있을수 있다고 본적은 있습니다.

그런데 NVARCHAR는 문자당 전부 2BYTE아닌가요?


by 한번사는인생 [2022.09.07 14:46:22]

답변주신 것을 풀이 한다면.

NVARCHAR일 경우.

'a' = 2Byte.

'김' = 2Byte 크기로 저장된다는 말씀이신건가요?

사실 정확하게 어떤 경우에 사용해야 하는지 잘 모르고 사용하고 있어서

정확하게 알고싶어서 질문을 남겼습니다.


by 우리집아찌 [2022.09.07 14:52:35]

오라클로 체크하면

SELECT LENGTHB('11') FROM DUAL -> 2BYTE

SELECT LENGTHB(N'11') FROM DUAL -> 4BYTE 

로 나옵니다.

테이블에 직접 넣고 테스트하지는 못했습니다.

 

 


by 포동푸우 [2022.09.07 14:55:50]

제가 아는 범위에서,,  과거에는, DB charterset 이 유니코드 지원을 못하는 경우

- 타 DB 와의 연동,,  전사표준 등 사유로,,,  NLS CHARTERSET 이 만약 KO16MSWIN949 로 설정했다면  

한글을 2 byte 로 처리하면서 varchar2() 같은 경우,, order by 만으로 한글정렬을 할 때 문제가 생기거나, 다국어를 입력할 수 없는 문제등이 발생됩니다. 

이런 경우에, 이를 보완하기 위해서, Oracle 은 2번째 Charterset 인 national Charterset 을 지정할 수 있고, n 이 붙은 데이터 타입 ( ex nchar() ,, ) 을 사용하면 2번재 캐릭터셋인 national charterset 을 통해, 지원하지 어려운 데이터를 처리할 수 있게 했습니다. 

- 보통은 UTF8 혹은,, AL16UTF8, AL32UTF8 등으로 지정

....... 과거에는요... 

지금은  DB Charterset 을 대부분 유니코드 지원되는 UTF8 등으로 지정한 지 ,,, 꽤 되었고, 따라서 다국어를 지원해야 하는 글로벌 회사들도 national charterset 사용이 거의 없다고 알고 있습니다. 

기본 NLS Charterset 만으로 한글 처리 등에 문제가 없다면,, N타입은 사용하지 않아도 될 것 같습니다.  

 


by 한번사는인생 [2022.09.07 15:03:39]

아는 범위 내에서 답변해주셔서 고맙습니다.

 

MSSQL 상위 버전에서 NVARCHAR가 그래도 남아있는 거보면,

그래도 VARCHAR와의 다른 부분이 있지 않을까 싶습니다.

조금 더 찾아봐야겠습니다. 다시 한번 고맙습니다.


by 포동푸우 [2022.09.07 15:07:20]

설명할 수 있을 만큼, 제가 잘 모르는 것 같아서, 아래 검색 결과를 남깁니다. 

- https://rastalion.me/oracle-character-set-%EC%97%90-%EA%B4%80%ED%95%98%EC%97%AC/

 


by 우리집아찌 [2022.09.07 15:15:20]

NVARCHAR 유용점이라면 VARCHAR(4000)에 인코딩이 UTF계열이라면 한자당 3BYTE가 차지하는데

1333자 정도만이 가능합니다. 간혹 이런경우 CLOB으로만 TYPE을 바꾸어야 하는데

NVARCHAR라면 좀 더 넉넉히 슬수 있으니 그냥 쓸수있는 경우가 있을수 있네요. 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입