혼자공부하는 Mysql 책 04-1
정수형
데이터형식 | 바이트 수 | 숫자 범위 |
TINYINT | 1 | -128~127 |
SMALLINT | 2 | -32,768~32,767 |
INT | 4 | -21억~21억 |
BIGINT | 8 | -900경~900경 |
사람의 나이를 INT로 저장하는 것은 데이터 낭비이다. 사람의 나이가 21억이 되진 않으니까 말이다.
사람의 키는 SMALLINT(-32768~32768)로 저장하기엔 너무 크다. 그렇다고 TINYINT(-128~127)를 사용하기엔 범위가 부족하다
이때 UNSIGNED 예약어를 사용할 수 있다.
TINYINT는 -128~127 , 1바이트에 256개를 표현한다.
TINYINT UNSIGNED는 0~255 이다. 이 또한 1바이트에 256개이다. (스타크래프트의 업글 제한이 255인데 TINYINT UNSIGNED인듯하다.)
문자형
데이터형식 | 바이트 수 |
CHAR(개수) | 1~255 |
VARCHAR(개수) | 1~16383 |
거주지역을 서울/부산/경기 등으로 저장하는 경우에는 모두 2글자로 일정하기에 CHAR(2)로 저장하는 것이 좋다.
그룹이름같은 경우는 넉넉하게 10글자 정도로 VARCHAR(10)을 사용하는 것이 좋다.
CHAR와 VARCHAR의 차이는 불변, 가변의 차이다.
VARCHAR가 CHAR보다 공간을 효율적으로 운영할 수 있지만, MySQL 내부적으로 성능면에서는 CHAR로 설정하는 것이 조금 더 좋다.
데이터가 숫자형태라도 연산이나 크기에 의미가 없다면(번지수, 전화번호 같은경우) 문자형으로 지정하는 것이 좋다.
대량의 데이터
데이터 형식 | 바이트 수 | |
TEXT 형식 | TEXT | 1~65535 |
LONGTEXT | 1~4294967295 | |
BLOB 형식 | BLOB | 1~65535 |
LONGBLOB | 1~4294967295 |
소설이나 영화같은 대본을 저장할때는 LONGTEXT(42억자)가 안전할 것 같다.
BLOB은 글자가 아닌 이미지, 동영상등의 데이터를 담는다. 이런것을 이진데이터라고 하는데 테이블에 사진, 동영상등을 저장하고 싶다면 BLOB이나 LONGBLOB(최대 4GB)로 데이터 형식을 지정해야한다.(S3를 이용하는게 더 좋을것같다.)
실수형
데이터 형식 | 바이트 수 | 설명 |
FLOAT | 4 | 소수점 아래 7자리까지 표현 |
DOUBLE | 8 | 소수점 아래 15자리까지 표현 |
FLOAT와 DOUBLE형은 거의 비슷, 과학기술용 데이터가 아니라면 FLOAT도 충분하다.
날짜형
데이터 형식 | 바이트 수 | 설명 |
DATE | 3 | 날짜만 저장. YYYY-MM-DD 형식으로 사용 |
TIME | 3 | 시간만 저장. HH:MM:SS 형식으로 사용 |
DATETIME | 8 | 날짜 및 시간 저장. YYYY-MM-DD HH:MM:SS 형식 |
DATE는 날짜만, TIME은 시간만, DATETIME은 날짜와 시간을 둘 다 저장한다.
'개발 > Database' 카테고리의 다른 글
내부조인 외부조인 (0) | 2022.03.08 |
---|---|
MySQL 변수사용 (0) | 2022.02.25 |
데이터 변경을 위한 SQL 쿼리문 : INSERT, UPDATE, DELETE (0) | 2022.02.13 |
SELECT ~~ GROUP BY (0) | 2022.02.10 |
ORDER BY (0) | 2022.02.09 |