jeongwon
[Oracle] Built-in Data Types 본문
범주 및 형태 개요:
1. Character - 'nEWlec' 'A' '148'
1) CHAR
2) LONG - variable-length character strings containing up to 2 gigabytes - 1, or 231-1 bytes
최근 대신해 나온 CLOB 이 있어 잘 안 쓴다. 컬럼에 쓴다면 단 하나의 컬럼에만 적용할 수 있다.
3) CLOB - 대용량 텍스트 데이터 타입으로 최대 4Gbyte
크기도 더 크고, 여러 컬럼에 적용이 가능하다.
4) NCLOB - National.
2. Numeric - 38 3.85 3.85F 137
3. Date - '2013-02-09'
4. TIMESTAMP - '2013-06-03 10.38.29.00000'
1. CHAR
1) CHAR[(size [BYTE | CHAR])]]
고정길이 데이터. 길이가 들쭉날쭉한 데이터에 적합하지 않음. 메모리 낭비가 일어날 수 있거나 부족할 수 있음.
모든 데이터 크기가 같으므로 검색 속도가 빠르다. (VARCHAR와 비교)
2) VARCHAR2(size [BYTE | CHAR])
Variable. 가변길이 데이터. 최대값 지정의 의미로, 사용하지 않는 공간은 반환.
크기가 다른 각 데이터를 구분자를 기록하는 방식으로 저장돼 검색속도가 느리다.
3) NCHAR[(size)]
National. 컬럼의 영어/한국어뿐 아니라 각 세계 언어가 들어가야 하는 경우 유용.
문자 하나를 쓰게 될 때 더 많은 byte를 쓰게 된다.
4) NVARCHAR2(size)
National.
문자의 개수와 byte 크기를 확인하는 법:
SELECT LENGTH ('ab') FROM DUAL; -- 2
SELECT LENGTHB ('ab') FROM DUAL; --2 (byte)
SELECT LENGTH ('한글') FROM DUAL; -- 2
SELECT LENGTHB ('한글') FROM DUAL; --6 (byte)
각국 언어를 지원하는 환경을 확인하는 법 :
SELECT * FROM NLS_DATABASE_PARAMETERS
예를 들어 AL32UTF8 방식의 인코딩을 사용하고 있다면 한 글자가 3바이트를 사용한다.
따라서 CHAR(2) 라고 컬럼 값 사이즈를 지정하면 한글 입력이 불가능해진다.
만약 2글자의 문자를 넣을 수 있도록 지정하고 싶다면 컬럼 생성 조건을 아래처럼 CHAR(2 CHAR)의 형식으로 하면 된다.
CREATE TABLE MEMBER
(
-- GENDER CHAR(2)
GENDER CHAR(2 CHAR)
);
INSERT INTO MEMBER (GENDER) VALUES ('남성'); -- 6 BYTE 사용
하지만 좋은 방식은 아니다.
NCHAR의 경우 AL16UTF16 인코딩방식을 사용해 문자 하나를 표현할 때 2바이트를 사용한다.
CREATE TABLE MEMBER
(
GENDER NCHAR(2)
--GENDER CHAR(2 CHAR)
);
INSERT INTO MEMBER (GENDER) VALUES ('남성'); --4 BYTE 사용
따라서 이런 경우 위 형식이 더 바람직하다.
환경변수가 STANDARD 면 4000byte 기준으로 MAX 값을 사용할 수 있다.
EXTENDED로 하면 32767 byte까지 사용할 수 있다.
보다 더 큰 내용을 담기 위해서는 CLOB(character large object)를 사용할 수 있다.
2. NUMBER[(P [,S])]
다른 데이터베이스 시스템의 경우 정수, 실수형이 따로 있지만 오라클은 NUMBER만 있다.
NUMBER(4) --최대 4자 숫자 (ex: 9999)
NUMBER(6,2) -- 소수점 포함 최대 6자리. 반올림하여 소수점 2자리까지 표현.
NUMBER(6,-2) -- 소수점 포함 최대 6자리. 소수점 왼쪽 기준 2번째자리 기준 반올림. 123.456 이면 100
NUMER -- NUMBER(38,*) 과 같다.
NUMBER(*,5) -- NMBER(38,5)와 같다.
항목별로 적합한 데이터 유형을 고민하자.
CREATE TABLE MEMBER
(
ID VARCHAR2(50),
PWD NVARCHAR2(50),
NAME NVARCHAR2(50),
GENDER VARCHAR2(2),
AGE NUMBER(3),
BIRTHDAY CHAR(10), -- 2000-01-02
PHONE CHAR(13), -- 010-1234-2345
REGDATE DATE
);
3. Date 형식
1) DATE: 날짜 표현 시 년, 월, 일까지 표현. (4712 BC ~ 9999 AD. )
2) TIMESTAMP: 날짜 표현 시 년, 월, 일 외에도 시, 분, 초까지 표현.
DATE 형식은 기본적으로 숫자형 표현방식. 4712 BC 부터 계산하는데, 지역정보(변수)에 따라 다른 값을 뽑아냄.
확인은 아래 구문을 통해서 가능.
SELECT * FROM NLS_DATABASE_PARAMETERS
출처 :
https://www.youtube.com/watch?v=be6pyYAoFJE200
'DataBase' 카테고리의 다른 글
[ORACLE] 날짜 비교 DATE vs STRING (0) | 2022.11.14 |
---|---|
[Oracle] 테이블 수정하기 - CREATE, DROP, ALTER (0) | 2022.06.07 |
[데이터베이스 모델링] 물리적 데이터베이스 모델링 (0) | 2022.05.29 |
[데이터 모델링] 논리적 데이터 모델링 (0) | 2022.05.27 |
[데이터 모델링] 개요, 개념적 데이터모델링 (0) | 2022.05.27 |