반응형
# 컬럼 문자(char), 바이트(byte) 단위 변경
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)(데이터사전)
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)
> ALTER [SYSTEM|SESSION] SET NLS_LENGTH_SEMANTICS=[CHAR|BYTE]
2) 테이블 생성시 지정
> VARCHAR2(100 CHAR)
> 캐릭터셋 확인
1 2 3 4 5 6 7 8 9 10 | 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 전역 파라메터 조회
1 2 3 4 5 6 7 8 9 10 11 | 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 타입
1 2 3 4 5 6 7 8 | 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 타입 조회
1 2 3 4 5 | 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 ; |
> 테이블 생성및 테스트
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 32 33 34 35 36 37 38 | /* # 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 타입 |
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 | /* # 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 타입 |
출처:http://develop.sunshiny.co.kr/969
반응형
'프로그램 관련 > oracle' 카테고리의 다른 글
Oracle Replace 함수 생성(결과값 변환 출력) (0) | 2018.09.11 |
---|---|
KO16KSC5601 에서 UTF8 or AL32UTF8 데이터 이관(import) (0) | 2018.09.11 |
ORACLE DECODE , 사용기~ (0) | 2018.09.11 |
UNION과 UNION ALL 의 차이 및 주의 사항 (0) | 2018.08.22 |
oracle INTERSECT,MINUS 사용기 (0) | 2018.08.22 |