2022.11.09 수
회사에서 우분투로 개인 개발용 서버를 설치해주셨다. 물론 SQL Server도 같이 설치했다!그래서 오늘(목) SQL 실습을 하기 위한 데이터베이스 자료를 주셨는데 웬걸... MariaDB용으로 SQL문이 되어 있어서, MSSQL 용으로 다시 내가 바꿔야 했다. MS(Microsoft) SQL에는 nvarchar가 있고.. 헉... 파도파도 깊게 들어가는 느낌이 들어서 몰랐던 것 구글링으로 찾아보고, 개인 정리용으로 적어볼까 한다.
varchar는 가변 문자열을, nvarchar는 가변 유니코드 문자열을 말한다.
고정 길이의 문자열
가변 길이의 문자열
로 다룬다. varchar(10)에 'test'라는 4자 문자열을 삽입하면, 4byte + 1byte(길이를 저장하기 위한 메모리) = 5byte가 소모된다.
char(N) | varchar(N) |
---|---|
고정길이 문자열 저장 | 가변길이 문자열 저장 |
최대 길이 255바이트 | 최대길이 255바이트 |
크기보다 작은 문자열 저장 시 뒷부분은 공백으로 채워짐 | length+1만큼 저장됨 |
(데이터를 가져올 때는 공백을 제거하고 가져옴) | 무조건 VARCHAR를 사용시 가변이기 때문에 내부에서 추가적인 Logic이 발생되어 속도 저하를 일으킬 수 있다. |
0~255까지 설정가능 | 0부터 65,535까지 설정 가능 |
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까지 크기 지정 가능 |
-- | varchar | nvarchar |
---|---|---|
지원언어 | 영문 또는 테이블에 설정된 기본 지원 언어 | 유니코드 지원 |
영문, 숫자 데이터 크기 | 1byte | 2byte |
한글, 한자 데이터 크기 | 2byte | 2byte |