ORACLE/SQL2009. 9. 11. 20:52
반응형
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
char[(n)]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
유니코드가 아니고, 길이가 n바이트인 고정 길이 문자 데이터입니다. n은 1에서 8,000 사이의 값이어야 하고 저장소 크기는 n바이트입니다. char의 SQL-92 동의어는 character입니다.


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
varchar[(n)]
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
유니코드가 아니고, 길이가 n바이트인 가변 길이 문자 데이터입니다. n은 1에서 8,000 사이의 값이어야 하고 저장소 크기는 n바이트가 아니라 입력한 데이터의 실제 바이트 길이입니다. 입력한 데이터의 길이는 0일 수 있습니다. varchar의 SQL-92 동의어는 char varying 또는 character varying입니다.
비고

데이터 정의나 변수 선언문에서 n을 지정하지 않으면 기본 길이는 1입니다. CAST 함수에 n을 지정하지 않으면 기본 길이는 30입니다.

char이나 varchar을 사용하는 개체는 COLLATE 절을 사용하여 특정 데이터 정렬을 할당하지 않는 한 데이터베이스의 기본 데이터 정렬이 할당됩니다. 데이터 정렬은 문자 데이터를 저장하는 데 사용하는 코드 페이지를 제어합니다.

여러 언어를 지원하는 사이트는 문자 변환 문제를 최소화하기 위해 유니코드 nchar 또는 nvarchar 데이터 형식을 사용하는 것을 고려해야 합니다. char 또는 varchar을 사용하는 경우,

    * 열의 데이터 값이 크기가 비슷할 경우 char를 사용합니다.
    * 열의 데이터 값이 크기가 다를 경우 varchar를 사용합니다.

CREATE TABLE 또는 ALTER TABLE을 실행할 때 SET ANSI_PADDING이 OFF면 NULL로 정의된 char 열이 varchar로 처리됩니다.

데이터 정렬 코드 페이지에서 더블바이트 문자를 사용할 경우 저장소 크기는 계속 n바이트입니다. 문자열에 따라 n바이트의 저장소 크기가 n자보다 작을 수도 있습니다.


자료출처 : http://cafe.naver.com/q69.cafe?iframe_url=/ArticleRead.nhn%3Farticleid=22995


+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VARCHAR2 와  NVARCHAR2
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
VARCHAR2 타입은, 데이터베이스의 character set 데이터를 가변 길이로 저장하고, NVARCHAR2 타입은 데이터베이스의 national character set 데이터를 가변 길이로 저장하는데 사용되는 데이터 타입입니다.
NVARCHAR2 타입도 NCHAR 타입과 같이 Oracle 9i 이상 버전에서는 UNICODE를 사용하여야만 합니다. 따라서 UTF8이나 AL16UTF16만 가능합니다.

VARCHAR2 나 NVARCHAR2 의 주된 특징은, 컬럼 정의 시 지정된 max length보다 적은 길이의 문자열을 저장하는 경우, Empty Byte가 SPACE로 추가 (padding) 되지 않고, 실제 data만 저장되는 가변 길이라는 것입니다. 그래서 CHAR/NCHAR에 비해 불필요한 자원 낭비를 막고, 테이블에 대한 Full Scan시에도 작은블록을 읽어 성능상 장점이 있으며, Empty Block이 PADDING되지 않아 정확한 비교를 하는데 유의해야 할사항이 적습니다.

VARCHAR2 Data Type은 최대 4000byte까지 저장이 가능하며 , 자릿수는 반드시 지정해야 합니다.
한 편 NVARCHAR2 Data Type도 최대 4000byte까지 저장이 가능한데, 자릿수를 지정하지 않을 경우 한글자가 지정됩니다. 저장되는 National Character Set에 따라 AL16UTF16의 경우엔 2 BYTE, UTF8의 경우는 3BYTE가 기본입니다.

내부 저장방식을 dump() function으로 확인해 보면, VARCHAR2 및 NVARCHAR2 의 내부 데이터 코드값은 1 입니다. 이 내부코드 값으로 Data Type에 대한 식별이 가능합니다.

Length는 실제 data를 insert한 양에 따라 유동적입니다. CHAR/NCHAR에 비해 불필요한 space가 추가되지 않았음을 확인할 수 있습니다.
실제로 저장된 문자data는 각 문자의 ASCII CODE값만 저장되었음을 확인이 하실 수 있습니다.

참고>
참고로 VARCHAR2와 NVARCHAR2의 dump결과 내부코드가 같으나, 구별은 table description으로
column에 정의된 Data Type에 대한 확인이 가능하며, 또한 한글의 경우 저장된 byte로도 확인이 가능합니다.
예를 들어 DB characterset이 KO16KSC5601이고 national characterset이 UTF8인 경우,
“가”를 저장한다고 보면, varchar2 Data Type의 length는 2byte이나 nvarchar2 Data Type은 3byte로 보입니다.
물론 DB characterset과 national characterset이 같은 UTF8인 경우엔 column에 정의된 Data
Type으로만 확인이 가능합니다.


자료출처 : http://blog.naver.com/redfreek2c?Redirect=Log&logNo=120028930188
반응형

'ORACLE > SQL' 카테고리의 다른 글

NVL,DECODE  (0) 2010.01.03
constraint 제약조건 (primary, foreign , unique,check, default)  (0) 2009.11.02
ROLLUP , CUBE , GROUPING  (0) 2009.09.02
Oracle 널값(null)에 대하여 정리  (0) 2009.08.21
SELECT문 및 연산자  (0) 2009.08.10
Posted by [PineTree]