1. 데이터타입의 종류, 특징
1-1. 숫자 데이터타입(Numeric Data Types)
<aside>
💡
- 숫자 데이터 타입은 양수, 음수, 소수, 0, 무한대, 그리고 연산에 의한 정의되지 않은 값(”not a number” or NAN)등을 저장한다.
</aside>
데이터 타입 |
설명 |
NUMBER |
- 0을 포함한 음수와 양수 등의 숫자를 저장 |
-
NUMBER 타입은 ***NUMBER(p,s)***와 같이 사용하는데, 여기서 p는 정밀도로 소수점을 포함한 자릿수를 의미하고, s는 배율로 소수점의 자릿수를 의미한다.
-
1~22byte를 필요로한다. |
| FLOAT | - NUMBER의 하위 타입, NUMBER와 다르게 배율 s를 사용하지 않고, p의 범위가 1~126이진수이다.
-
FLOAT은 정확도가 떨어져 BINARY_FLOAT나 BINARY_DOUBLE을 사용하는게 좋다. |
| BINARY_FLOAT | - 32bit의 부동소수점 수이다.
-
4byte가 필요하다. |
| BINARY_DOUBLE | - 64bit의 부동소수점 수이다.
-
8byte가 필요하지만 더 정확하다. |
-
NUMBER는 s 값을 지정하지 않으면 자동으로 integer로 저장한다.이해를 돕기 위해 예시를 가져왔다.

출처:https://code-lab1.tistory.com/341[코드 연구소:티스토리]
1-2. 날짜 데이터 타입(Datetime Data Type)
<aside>
💡
- 날짜 데이터 타입은 날짜와 시간 등을 저장할 수 있는 데이터 타입이다.
</aside>
데이터 타입 |
설명 |
DATE |
- BC 4712년부터 AD 9999 년까지의 날짜를 저장. 7byte로 저장한다. |
- Datetime 필드인 YEAR, MONTH, DAY, HOUR, MINUTE, SECOND를 포함한다. |
| TIMESTAMP | - DATE 타입의 확장된 타입이다. 9자리 밀리초까지 저장이 가능하다. |
| TIMESTAMP WITH TIME ZONE | - 시간대의 지역 이름 혹은 주소 등을 포함한 TIMESTAMP |
| TIMESTAMP WITH LOCAL TIME ZONE | - 클라이언트 시스템의 TIME ZONE 정보를 포함한 TIMESTAMP
- TIMESTAMP WITH TIME ZONE과 다른 점은 유저가 해당 데이터를 요청하면, 언제나 클라이언트 시스템의 지역을 고려해 결괏값을 보여준다는 것이다. |
1-3. 문자 데이터 타입(Character Data Type)
<aside>
💡
- 문자 데이터 타입은 문자 혹은 자유 형식 텍스트를 저장한다.
- 문자 데이터 타입은 다른 데이터 타입에 비해 제한성이 적어 유연한 사용이 가능하다.
- 예를 들어 문자 데이터 타입은 숫자 값을 저장할 수 있지만 숫자 값에는 숫자만 저장이 가능하다.
</aside>
데이터 타입 |
설명 |
CHAR |
- 최대 2000byte의 고정 길이 문자를 저장. 기본(최소) 크기는 1byte |
- 처음 정한 크기보다 더 적은 문자열을 입력하면 공백으로 채워짐
ex) CHAR(5) ← ‘hi’ 입력하면 ‘hi ‘로 저장 |
| VARCHAR2 | - 최대 4000byte의 가변 길이 문자를 저장. 최소 사이즈는 1byte 혹은 1character.
- 길이를 가변적으로 정하므로 CHAR보다 메모리 절약이 가능하다.
ex) VARCHAR2(5) ← ‘hi’ 입력하면 ‘hi’로 저장 |
| NCHAR | - 최대 2000byte의 고정 길이 유니코드 문자를 저장 |
| NVARCHAR | - 가변 길이 유니코드 문자를 저장. 최대 크기는 2000 ~ 32767 byte로 MAX_STRING_SIZE에 따라 다름. |
-- char
DROP TABLE char_example;
CREATE TABLE char_example (
id NUMBER PRIMARY KEY,
name CHAR(10),
nick VARCHAR2(10)
);
INSERT INTO char_example VALUES (1, 'ORACLE', 'ORACLE');
SELECT * FROM char_example;
-- length(컬럼명)
SELECT id, name, LENGTH(name), nick, LENGTH(nick) FROM char_example;
ROLLBACK;
CHAR, VARCHAR2 테스트
- CHAR(10)은 ORACLE을 저장해도 10자로 저장(공백포함)
- VARCHAR(10)은 ORACLE을 저장하면 6자로 저장됨(공백없음)
- 이처럼 CHAR는 고정길이, VARCHAR2는 가변 길이로 동작하는 차이가 있다.