테이블을 생성할떄 컬럼에 들어갈 데이터에 대한 제약조건을 걸었었는데, 그 안에서 컬럼에 들어갈 자료형도 지정 할 수 있다.
어떤 자료형이 있는지 간단히 알아보자
(컴퓨터는 모든 데이터를 0과 1로 인식하는 것을 다시 상기하기)
테이블의 각 컬럼(열 데이터)들마다 어떤 자료형이 들어갈 것인지 명시해야(숫자인지, 문자인지 등), 정확한 데이터가 입력될 수 있기 때문에 오류를 방지할 수 있어 테이블을 생성할 때 자료형을 입력해준다.
ex) 이름을 넣는데 숫자가 들어오면 안되니깐 문자만 들어올수 있게 지정해주는 것이다.
소수점이 없는 숫자, 인원수,가격,수량 등에 많이 사용된다.
데이터 용량에 따라 숫자 데이터 크기를 설정한다.
자료형 | 바이트 | 범위 | UNSIGNED |
---|---|---|---|
TINYINT | 1 | -128 ~ 127 | 0 ~ 255 |
SMALLINT | 2 | -32,768 ~ 32,767 | 0 ~ 65,535 |
INT | 4 | 약 -21억 ~ +21억 | 0 ~ 42억 |
BIGINT | 8 | 약 -900경 ~ +900경 | 0~1800경 |
MEDIUMIN는 잘 사용 X
|MEDIUMINT|3|-8,388,608 ~ 8,388,607|0 ~ 16,777,215|
create table type1 (
tinyint_col tinyint,
smallint_col smallint,
int_col int,
bigint_col bigint
);
INSERT INTO type1 VALUES(127, 32767, 2147483647, 9000000000000000000);
- 데이터 범위를 넘었을 경우 입력 /추가 X
INSERT INTO type1 VALUES(128, 32768, 2147483648, 90000000000000000000);
Error Code: 1264. Out of range value for column 'tinyint_col' at row 1
좁은 범위의 수 표현이 가능하고, 정확한 값
자료형 | 설명 | 범위 |
---|---|---|
DECIMAL( s, d ) | 실수 부분 총 자릿수( s ) & 소수 부분 자릿수 ( d ) | s 최대 65 |
소수점 아래를 어디까지 표현하는지 차이, FLOAT를 많이 사용함. 과학 데이터가 아닌이상!
넓은 범위의 수 표현 가능하다.
데이터 형식 | 바이트 수 | 범위 |
---|---|---|
FLOAT | 4 | 소수점 아래 7자리 까지 표현 |
DOUBLE | 8 | 소수점 아래 15자리까지 표현 |
자료형 | 설명 | 차지하는 바이트 | 최대 바이트 |
---|---|---|---|
CHAR(s) | 고정 사이즈(남는 글자 공백(스페이스)으로 채우는 것) | s(고정값) | 255 |
VARCHAR(s) | 가변 사이즈 | 실제 글자수[최대값 s] +1 [글자수정보] | 65,535 |
주의
- 검색시 CHAR가 더 빠르다.
(하지만? 무조건 좋은 것은 아닌데, 이유 : 비어있는 공간만큼 공백채워서 byte를 쓰기 때문에 쓸데없는 데이터를 더 쓸 가능성 이있다.)- VARCHAR 컬럼 길이 값이 4글자 보다 적을 경우 => CHAR로 자동 변한된다.
- 전화번호는 -하이픈 문자가 쓰이는 경우가 있어서 char, varchar 문자형으로 사용한다.
- 하이픈을 제외하고 저장하더라도 숫자의 의미가 없다. 연산/ 크다작다 의미가 없음!
문자열보다 더 긴 문자의 텍스트를 작성하는 컬럼(열 데이터)일 경우 사용한다. (ex) 게시판의 글)
자료형 | 최대 바이트 크기 |
---|---|
TEXT | 1~65,535 |
LONGTEXT | 1~ 4,294,967,295 약 42억자 |
BLOB | 1~65535 |
LONGBLOB | 1~4,294,967,295 약 42억 |
|TINYTEXT| 1~255|
|MEDIUMTEXT|1~ 16,777,215|
잘 사용 X
자료형 | 형식 | 설명 |
---|---|---|
DATE | YYYY-MM-DD | |
TIME | HH:MI:SS | HHH: -838 ~ 838까지의 시간 |
DATETIME | YYYY-MM-DD HH:MI:SS | 내가 입력한, 입력된 시간을 그 값 자체로 저장(어디서든 동일한 값) |
TIMESTAMP | YYYY-MM-DD HH:MI:SS | MySQL이 설치된 컴퓨터의 시간대를 기준으로 저장, 각 국가의 시간대마다 달라짐 |