varchar와 nvarchar의 차이
<VARCHAR>
다양한 길이의 글자를 저장하는 데이터 타입, 유니코드를 지원하지 않는다. 그래서 영문, 숫자 또는 데이터베이스의 기본언어로 설정된 것에 대해서는 1바이트, 그 외의 언어에는 글자당 2바이트가 사용된다.
최대 길이(max): 지정하지 않으면 기본값 1이다. 255 bytes를 초과할 수 없다. => MySQL 기준 5.0.3 이후
최대 값은 65535bytes이다.
최소 길이(reserve): 지정하지 않으면 기본 값은 0 이다. 범위는 0 - 최대 값 이다.
공백까지 그대로 저장한다.
varchar(max, reserve)
Plus) 255바이트까지는 길이에 대한 정보를 담는 것에 1바이트가 쓰이지만 255바이트를 초과하면 길이 정보에 2바이트가 쓰인다.
쉽게 말해, 254바이트 만큼의 텍스트를 쓴다고 가정하면 실제 저장되는 것은 255바이트이다. 1바이트는 길이 정보를 담기 때문,
하지만 1000바이트 만큼의 텍스트를 쓴다면 실제 저장되는 것은 1002바이트 만큼이다. 256부터는 길이정보에 2바이트가 소모되기 때문
<NVARCHAR>
다양한 길이의 글자를 저장하는 데이터 타입, 데이터는 글자, 숫자들, 그리고 데이터베이스 영역 내 코드세트가 지원하는 다른 글자들로 이루어진 문자열이 될 수 있다. 보통 모든 텍스트를 저장할 수 있는 타입이며 유니코드를 지원한다. 그리하여 모든 언어에 대해 글자당 2바이트가 사용된다.
nvarchar(max, reserve)
최대 길이(max): 지정하지 않으면 기본값 1이다. 255 bytes를 초과할 수 없다. (+ 그러니 nvarchar열에 인덱스를 지정하면 254바이트가 최대 길이라고 할 수 있다.) => MySQL 기준 5.0.3 이후 최대 값은 65535bytes이다.
최소 길이(reserve): 지정하지 않으면 기본 값은 0 이다. 보통 처음에는 값이 없거나 적지만 추후 추가될 가능성이 있는 행을 삽일할 경우 지정한다고 한다. 범위는 0 - 최대 값 이다.
공백까지 그대로 저장한다.
IBM에서 정의하는 varchar와 nvarchar의 유일한 차이는?
The NVARCHAR data type is a locale-sensitive data type. The only difference between NVARCHAR and VARCHAR data types is the collation order, except in databases that were created with the NLSCASE INSENSITIVE property.
collation은 수집분석, 혹은 순서를 나열하는 것 같은 같은 느낌의 단어이다. 여기서는 순서를 나열하는 것이다.
NLSCASE INSENSITIVE은 또 무슨 말일까? (이것에 대해서는 여전히 알 수 없다.)
NVARCHAR는 collation에 상관없이 모든 문자를 저장한다. 반면 VARCHAR의 경우 collation설정에 따라 어떤 문자를 저장할지에 영향을 끼친다는 이야기도 있다. (언어별로 글자를 나열하는 방식이 다 다르고 같은 글자라도 언어별로 인식하는 방법이 다르다. 이로 인한 문제인듯 하다.)
하지만 개발하는 부분에서 주로 신경쓰는 부분은 언어의 지원여부와 용량인 듯 하다.가볍게 보자면
varchar는 영어, 숫자, 데이터베이스 기본언어만을 사용할 경우
(모든 언어를 적용하고 싶다면 Collation을 UTF8처럼 유니코드가 지원되는 것으로 하면 된다.)
nvarchar는 다국어 또한 사용할 경우
활용하는 것이 좋을 듯 하다. 모두 다 nvarchar로 해버리면 영어만 쓰는 DB같은 경우처럼 불필요한 용량이 낭비될 수 있기 때문이다.
출처:
https://www.ibm.com/docs/en/informix-servers/14.10?topic=data-nvarchar-type
The NVARCHAR data type
The NVARCHAR data type stores character data in a variable-length field. Data can be a string of single-byte or multibyte letters, digits, and other characters that are supported by the code set of your database locale. Element Description max Specifies th
www.ibm.com
What is the point of COLLATIONS for nvarchar (Unicode) columns?
IVe read a lot about this. Still some questions : Im not talking about case sensitive here... If I have a char (ש for example) and he is stored in nvarchar - which can hold anything , Why wou...
stackoverflow.com
https://jeongkyun-it.tistory.com/187
[Database] 자료형 Varchar와 nVarchar의 차이는? (개념/ 예제)
서론 이번 글에서는 database에서의 자료형 varchar와 nvarchar의 차이점에 대해 간단히 알아보려한다. VARCHAR vs NVARCHAR (n)varchar란? 문자열을 저장할 때 사용하는 자료형이다. 표현 범위로는 지정할 수
jeongkyun-it.tistory.com