# 컬럼 문자(char), 바이트(byte) 단위 변경


Docs - NLS_LENGTH_SEMANTICS

NLS_LENGTH_SEMANTICS는 바이트(Byte) 또는 문자(Char)길이를 사용하여 char, varchar2 타입의 컬럼을 만들수 있습니다.
이때 기존의 컬럼은 영향을 받지 않습니다.

NLS_LENGTH_SEMANTICS는 SYS와 SYSTEM의 테이블에 적용되지 않고, 데이터 사전(Data Dictionary)은 항상 바이트 의미 체계를 사용합니다.
그래서 NLS_LENGTH_SEMANTICS를 이용하여 CHAR 단위의 컬럼을 생성해도 데이터 사전에는 실제 바이트로 보여줌


# Oracle 9i부터 컬럼의 데이터타입에 Byte 또는 Char를 붙여 단위별 지정 가능
   문자(Char)단위로 변경 하면 설정한 값에 따라 자동으로 Byte 공간을 할당해줍니다.  
> KO16KSC5601
Byte 단위 : 영문/숫자/기호(1Byte), 한글/한자(2Byte)
Char 단위 설정 예) VARCHAR2(100 CHAR) -> VARCHAR2(200)(데이터사전)

> UTF8
Byte 단위 : 영문/숫자/기호(1Byte), 한글/한자(3Byte)
Char 단위 설정 예) VARCHAR2(100 CHAR) -> VARCHAR2(400)(데이터사전)

# NLS_LENGTH_SEMANTICS 설정 방법
1) NLS_LENGTH_SEMANTICS 전역 파라메터 변경 : DBMS 재시작 필요
  > ALTER [SYSTEM|SESSION] SET NLS_LENGTH_SEMANTICS=[CHAR|BYTE]
 
2) 테이블 생성시 지정
  > VARCHAR2(100 CHAR)

> 캐릭터셋 확인
SELECT PARAMETER, VALUE 
    FROM NLS_DATABASE_PARAMETERS 
    WHERE PARAMETER LIKE '%CHAR%';
    
      PARAMETER                      VALUE
------------------------------ --------------------------
NLS_NUMERIC_CHARACTERS         .,
NLS_CHARACTERSET               AL32UTF8
NLS_NCHAR_CONV_EXCP            FALSE
NLS_NCHAR_CHARACTERSET         AL16UTF16

> NLS_LENGTH_SEMANTICS 전역 파라메터 조회
SELECT *
    FROM NLS_SESSION_PARAMETERS
    WHERE PARAMETER = 'NLS_LENGTH_SEMANTICS'
;

-- SQL Plus 에서 파라메터 조회
SQL> SHOW PARAMETER NLS_LENGTH_SEMANTICS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics                 string      BYTE


> 데이터베이스 전역 NLS_LENGTH_SEMANTICS 변경, char 타입
SQL> ALTER SYSTEM SET NLS_LENGTH_SEMANTICS=CHAR SCOPE=BOTH ;

-- SQL Plus 에서 파라메터 조회
SQL> SHOW PARAMETER NLS_LENGTH_SEMANTICS

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
nls_length_semantics                 string      CHAR


> DATA_LENGTH, CHAR_USED 타입 조회
SELECT  COLUMN_ID, OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, CHAR_USED 
    FROM DBA_TAB_COLUMNS 
    WHERE TABLE_NAME ='[테이블명]'
    ORDER BY COLUMN_ID
;

> 테이블 생성및 테스트
/*
 # CHAR 타입 테이블 생성
*/
CREATE TABLE CHAR_TEST(
    SEQ NUMBER,
    TEXT_SMALL VARCHAR2(100 CHAR),
    TEXT_BIG VARCHAR2(4000 CHAR)
)

/*
 # CHAR_TEST 테이블 구조 조회
 > 테이블 구조상에서는 CREATE TABLE시에 설정한 사이즈로 Char 타입 정보 출력
*/
DESC CHAR_TEST;

Column Name    ID    Pk    Null?    Data Type    
--------------------------------------------------------
     SEQ         1        Y    NUMBER
   TEXT_SMALL   2        Y    VARCHAR2 (100 Char)
   TEXT_BIG     3        Y    VARCHAR2 (4000 Char)


/*
 # Data Dictionary 테이블 컬럼별 타입 조회(실제 바이트)
 > 데이터사전에서는 Char 타입에 맞춰서 자동으로 변경된 데이타 길이가 보여짐
   VARCHAR2 타입 최고 길이 4000바이트 안에서 자동 변경
*/
SELECT  COLUMN_ID, OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, CHAR_USED 
    FROM DBA_TAB_COLUMNS 
    WHERE TABLE_NAME ='CHAR_TEST'
    ORDER BY COLUMN_ID
;

COLUMN_ID   OWNER   TABLE_NAME   COLUMN_NAME   DATA_TYPE   DATA_LENGTH   CHAR_USED
--------------------------------------------------------------------------------
    1    SUNSHINY    CHAR_TEST    SEQ    NUMBER    22    
    2    SUNSHINY    CHAR_TEST    TEXT_SMALL    VARCHAR2    400    C -- CHAR 타입
    3    SUNSHINY    CHAR_TEST    TEXT_BIG    VARCHAR2    4000    C -- CHAR 타입

/*
 # BYTE 타입 테이블 생성
 > 전역 NLS_LENGTH_SEMANTICS 가 BYTE 일경우 기본으로 BYTE 타입 생성
*/
CREATE TABLE BYTE_TEST(
    SEQ NUMBER,
    TEXT_SMALL VARCHAR2(100),
    TEXT_BIG VARCHAR2(4000)
)

-- BYTE_TEST 테이블 구조 조회
DESC BYTE_TEST;

Column Name    ID    Pk    Null?    Data Type    Default    Histogram    Encryption Alg
------------------------------------------------------------------------------------
    SEQ         1        Y    NUMBER        No        
TEXT_SMALL    2        Y    VARCHAR2 (100 Byte)        No        
TEXT_BIG      3        Y    VARCHAR2 (4000 Byte)        No    

-- Dictionary 테이블 컬럼별 타입 조회
SELECT  COLUMN_ID, OWNER, TABLE_NAME, COLUMN_NAME, DATA_TYPE, DATA_LENGTH, CHAR_USED 
    FROM DBA_TAB_COLUMNS 
    WHERE TABLE_NAME ='BYTE_TEST'
    ORDER BY COLUMN_ID
;

COLUMN_ID    OWNER    TABLE_NAME    COLUMN_NAME    DATA_TYPE    DATA_LENGTH    CHAR_USED
--------------------------------------------------------------------------------
     1    SUNSHINY    BYTE_TEST    SEQ    NUMBER    22    
     2    SUNSHINY    BYTE_TEST    TEXT_SMALL    VARCHAR2    100    B -- BYTE 타입
     3    SUNSHINY    BYTE_TEST    TEXT_BIG    VARCHAR2    4000    B -- BYTE 타입



※ 위 내용은, 여러 자료를 참고하거나 제가 주관적으로 정리한 것입니다.
   잘못된 정보나 보완이 필요한 부분을, 댓글 또는 메일로 보내주시면 많은 도움이 되겠습니다.
11 20, 2013 18:11 11 20, 2013 18:11


Trackback URL : http://develop.sunshiny.co.kr/trackback/969

Leave a comment
[로그인][오픈아이디란?]
오픈아이디로만 댓글을 남길 수 있습니다

« Previous : 1 : 2 : 3 : 4 : 5 : ... 9 : Next »

Recent Posts

  1. HDFS - Python Encoding 오류 처리
  2. HP - Vertica ROS Container 관련 오류...
  3. HDFS - Hive 실행시 System Time 오류
  4. HP - Vertica 사용자 쿼리 이력 테이블...
  5. Client에서 HDFS 환경의 데이터 처리시...

Recent Comments

  1. 안녕하세요^^ 배그핵
  2. 안녕하세요^^ 도움이 되셨다니, 저... sunshiny
  3. 정말 큰 도움이 되었습니다.. 감사합... 사랑은
  4. 네, 안녕하세요. 댓글 남겨 주셔서... sunshiny
  5. 감사합니다 많은 도움 되었습니다!ㅎㅎ 프리시퀸스

Recent Trackbacks

  1. Roku App Development Roku App Development 3 07
  2. safety goggles safety goggles 2 07
  3. custom wheelchair for dogs custom wheelchair for dogs 30 06
  4. phoenix digital marketing agency phoenix digital marketing agency 29 06
  5. streaming tv channels streaming tv channels 28 06

Calendar

«   07 2020   »
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  

Bookmarks

  1. 위키피디아
  2. MysqlKorea
  3. 오라클 클럽
  4. API - Java
  5. Apache Hadoop API
  6. Apache Software Foundation
  7. HDFS 생태계 솔루션
  8. DNSBL - Spam Database Lookup
  9. Ready System
  10. Solaris Freeware
  11. Linux-Site
  12. 윈디하나의 솔라나라

Site Stats

TOTAL 2998823 HIT
TODAY 116 HIT
YESTERDAY 905 HIT