varchar와 nvarchar

prana·2022년 11월 10일
0

database

목록 보기
16/38

2022.11.09 수

회사에서 우분투로 개인 개발용 서버를 설치해주셨다. 물론 SQL Server도 같이 설치했다!

그래서 오늘(목) SQL 실습을 하기 위한 데이터베이스 자료를 주셨는데 웬걸... MariaDB용으로 SQL문이 되어 있어서, MSSQL 용으로 다시 내가 바꿔야 했다. MS(Microsoft) SQL에는 nvarchar가 있고.. 헉... 파도파도 깊게 들어가는 느낌이 들어서 몰랐던 것 구글링으로 찾아보고, 개인 정리용으로 적어볼까 한다.


1. varchar 와 char

varchar는 가변 문자열을, nvarchar는 가변 유니코드 문자열을 말한다.

1) char와 varchar (MySQL)

  • 문자열 데이터를 저장할 수 있는 타입.
  • 대소문자 구분하지 않는다. char는 문자열 길이가 한 번 설정되면 그대로 고정되는 고정 길이의 문자열
  • char(10)인데 'test'라는 4자의 문자열을 insert 하게 되면, 남는 공간은 6개의 공백으로 채우게 된다.
  • varchar는 문자열 길이가 고정되지 않는 가변 길이의 문자열로 다룬다.
  • 가변 길이란, VARCHAR(20)인 경우, 입력한 크기만큼의 공간만 잡히게 되는데, 2byte 문자를 넣으면 2byte만큼의 데이터만 잡게 된다.
  • varchar(10)에 'test'라는 4자 문자열을 삽입하면, 4byte + 1byte(길이를 저장하기 위한 메모리) = 5byte가 소모된다.


    char(N)varchar(N)
    고정길이 문자열 저장가변길이 문자열 저장
    최대 길이 255바이트최대길이 255바이트
    크기보다 작은 문자열 저장 시 뒷부분은 공백으로 채워짐length+1만큼 저장됨
    (데이터를 가져올 때는 공백을 제거하고 가져옴)무조건 VARCHAR를 사용시 가변이기 때문에 내부에서 추가적인 Logic이 발생되어 속도 저하를 일으킬 수 있다.
    0~255까지 설정가능0부터 65,535까지 설정 가능

2. nvarchar와 varchar

varchar는 가변 문자열이며, nvarchar는 유니코드 지원 가변 문자열이다.

그렇기 때문에 비유니코드 지원인 varchar는 영어, 숫자는 1byte, 그 외 한글, 한자 등은 2byte로 저장한다.
반면, nvarchar는 유니코드 지원이므로 한글, 영문 상관없이 1개의 문자당 모두 2byte로 저장한다.

'HelloMynameis"라는 영문은 varchar(10), nvarchar(10)까지 설정은 동일하지만,
varchar는 12바이트, nvarchar는 20바이트를 사용한다.

nvarchar가 더 많은 바이트를사용하는 이유는, 유니코드를 지원하는 데이터형이기 때문이다.

nchar(N)nvarchar(N)
유니코드 고정 길이 문자형유니코드 가변 길이 문자형.
0~4000자 가능N을 사용하면 1~40000까지 크기 지정 가능

💥 주의할 점

  1. 다국어 지원이 필요한 테이블이라면, nVarchar로 설계해야 한다.
  2. 데이터 이행 시 nVarchar를 varchar로 이행하려면, 자릿수를 2배 정도 잡아주는 것이 좋다.
    ex) nvarchar(10) => varchar(20)

결론

--varcharnvarchar
지원언어영문 또는 테이블에 설정된 기본 지원 언어유니코드 지원
영문, 숫자 데이터 크기1byte2byte
한글, 한자 데이터 크기2byte2byte

0개의 댓글

관련 채용 정보