database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
ㆍMS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MS-SQL Q&A 1494 게시물 읽기
No. 1494
nvarchar vs varchar
작성자
김민영(visionmcoj)
작성일
2004-08-20 10:51
조회수
8,152

또 이렇게 궁금해서 질문드립니다..

 

nvarchar 와 varchar의 차이점이 무엇인지 궁금합니다..

nchar 와 char 의 차이점도 마찬가지 겠지요?

 

그럼 아시는 분들의 도움을 부탁드립니다..

이 글에 대한 댓글이 총 6건 있습니다.

nvarchar와 varchar를 비교를 요약하면

문자셋(문자코드라고 하는것이 맞을런지 모르겠는걸요)의 차이입니다. 당연 문자셋이 다르므로 저장되는 바이트도 다르게 됩니다.

 

varchar(n)

유니코드가 아니고, 길이가 n바이트인 가변 길이 문자 데이터입니다. n은 1에서 8,000 사이의 값이어야 하고 저장소 크기는 입력한 데이터의 실제 바이트 길이입니다. 입력 데이터가 없다면 저장소의 크기는 0이겠지요.

 

nvarchar(n)

n개의 가변 길이 유니코드 문자 데이터입니다. n은 1에서 4.000 사이의 값이어야 합니다. 저장소 크기는 바이트로 입력된 문자 개수의 두 배입니다. 입력한 데이터의 길이가 0일수도 있습니다.

 

이렇게 설명하면 두Type에 대한 설명이 되는지요..

그리고 char, nchar의 경우도 위의 요약과 마찬가지의 차이를 가집니다.

 

 

여리님이 2004-08-20 11:27에 작성한 댓글입니다. Edit

고맙습니다..

 

근데요.. 좀더 어떨때 사용하는 것이 좋은지도 설명해주실수 있을런지요..

 

 

김민영(visionmcoj)님이 2004-08-20 12:06에 작성한 댓글입니다.

어떤 것을 사용하는 가에 대한 것은

칼럼에 들어가는 데이타에 따라 결정을 하는 데요.

통산 nvarchar보다는 varchar를

nchar 보다는 char를 더 많이 쓰는게 경향인 듯합니다.

 

자료의 저장소도 또한 varchar가 적으니..

여리님이 2004-08-20 12:32에 작성한 댓글입니다. Edit

한 DB에서 여러개의 문자세트(여러 언어를 사용할 경우)로 된 데이타를 사용할 경우에 사용하는
 것이 가장 많을 것 입니다.

이유는 유니코드가 아닌 데이타를 사용할 경우 MS-SQL이 설치시에 설정된 문자집합을 기준으로
데이타(디코딩할 byte길이)를 판단한다는 것입니다.

Varchar(10) '한글'이라는 데이타가 들어 있다면  SELECT시 한글 문자집합을 기준으로 하는
MS-SQL서버에서는 2Byte를 하나의 단위로 해서 처리를 해 주지만, 영어나, 일어등 한글 이외의
문자집합을 사용하는 경우, 1Byte 단위로 처리를 해서 줄바꿈등의 다른 형태의 내용으로 해석할
수 있습니다.
 
   이런 문제를 해결하기 위해서 저장할 때부터 각 문자를 유니코드 문자로 즉 2Byte로 인코딩하여,
서버 문자집합에 따른 디코딩할 byte 길이를 결정함에 따른 발생할 수 있는 디코딩의 문제를 해결하기
위해서 유니코드 데이타 타입들을 사용합니다.
(물론 다른 문자집합을 사용하는 서버에서는 깨진 문자로 나오겠지만요)


 

 

가을남자님이 2004-08-20 18:37에 작성한 댓글입니다. Edit

영어나, 일어등 한글 이외의문자집합을 사용하는 경우, 1Byte 단위로 처리를 해서 줄바꿈등의 다른 형태의 내용으로 해석할 수 있습니다. 
  
이런 문제를 해결하기 위해서 저장할 때부터 각 문자를 유니코드 문자로 즉 2Byte로 인코딩하여, 서버 문자집합에 따른 디코딩할 byte 길이를 결정함에 따른 발생할 수 있는 디코딩의 문제를 해결하기 위해서 유니코드 데이타 타입들을 사용합니다. (물론 다른 문자집합을 사용하는 서버에서는 깨진 문자로 나오겠지만요)

 

##########################################

바로위의 댓글에서.. 요기 언급한 부분부터 이해가 잘안되거든요..

유니코드에서는 어떻게 한글. 이라는 글자가 1byte로 인식이 된다는건지.. 그리구 그 다음에 나오는 말도..

 

조금 이해가 안되는데. 설명을 좀 풀어서.. 부탁드려요..

워낙 초보라서. --;

김민영(visionmcoj)님이 2004-08-23 10:41에 작성한 댓글입니다.

한글 MS-SQL 서버에서 한글이 1byte로 저장되어 처리되는 것이 아니라, 한글인 경우, 2byte를 처리 단위로 한다는 말입니다.

Create Table Ttemp
(
    aa varchar(5)
);

insert into temp(aa) ('a한');


위 명령의 경우, 한글 MS-SQL에서는 3byte를 사용해서 'a한'을 저장하게 됩니다.
('a'가 1byte, '한' 2byte)
그리고 문자열 처리에서도 아래의 예와 같이 '한'을 하나의 처리 단위로 하게 됩니다.

select substring('a한',2,1)

그런데, 위 데이타를 다른 문자셋트를 사용하는 MS-SQL(일어 MS-SQL,중국MS-SQL등)에서는 '한'이 저장된 2byte에서
앞의 한 byte만 가지고 오게 되어 이상한 내용을 출력할 수 있게 됩니다.
이런 문제를 해결하기 위해서, 처음부터 하나의 문자 처리를 2byte로 단위로 처리하는
유니코드 데이타 타입으로 처리하여, 문자 저장내용의 이부분만 처리하여 제어문자등
이상한 내용으로 해석되는 것을 막고자 하는 것 입니다.


 

 

가을남자님이 2004-08-27 23:45에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1497remote 연결 [1]
김민영
2004-08-23
2991
1496게시판 검색 쿼리문에 관한 질문입니다 [1]
이주영
2004-08-23
3800
1495Date [2]
김민영
2004-08-20
2693
1494nvarchar vs varchar [6]
김민영
2004-08-20
8152
1492ㄱ 으로 시작하는 사람이름 [1]
박무열
2004-08-19
3154
1491hostname 변경시 ms sql server 환경 변경 방법 문의..
kis
2004-08-19
2623
1490다른 테이블의 갯수 세어서 insert하기 [1]
qudals
2004-08-19
2517
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다