[MySQL] VARCHAR, CHAR / DECIMAL / BLOB, TEXT / 날짜 관련 함수들
VARCHAR vs CHAR
-
공통점 : 문자열 자료형, 길이를 명시해주어야 함
-
varchar
-
가변형 문자열
-
VARCHAR(20)이라 적었어도 2byte의 문자만 적으면 2byte만큼의 데이터 공간(+ 길이에 대한 정보)만을 잡음
-
update, delete가 빈번할 경우 처리 속도가 늦어질 수 있음
-
-
char
-
고정형 문자열
-
CHAR(20)이라고 적으면 20바이트만큼의 데이터를 채우고 남은 공간은 공백으로 채움
-
입력속도가 상대적으로 빠름
-
DECIMAL
-
고정 소수점
-
DECIMAL(M, D)
- M = m자리 숫자 / D = 소수점 d자리
-
CREATE TABLE table_name(column_name DECIMAL(M, D));
-
BLOB(Binary Large OBject) / TEXT
-
대용량 텍스트
-
-
최소 용량 : 65536 byte
-
기본 용량 : 4gb
-
최대 용량 : 지원하는 HDD, SSD 용량
-
-
blob : 데이터를 2진 바이너리 코드로 저장
-
-
게시판 글쓰기 내용, 답변글 내용, 댓글 내용 등에 blob 또는 text 사용
-
아이디, 전화번호, 우편번호, 주소, 글제목 등에 char 사용
-
-
DB에 비밀번호 입력 시 blob 사용
-
blob은 기계어를 지원하는 바이너리 코드이기 때문에 비밀번호를 암호화하여 기계어 코드로 insert 할 수 있다.
-
blob으로 암호화 해 저장된 컬럼의 셀은 조회(select)하더라도 암호화된 결과만 볼 수 있다.
-
DATE / TIME / DATETIME
-
DATE : YYYY-MM-DD 형식으로 입력
-
TIME : HH:MM:SS 형식으로 입력
-
DATETIME : YYYY-MM-DD HH:MM:SS 형식으로 입력
-
ex)
CREATE TABLE BIRTH( NAME CHAR(10), BIRTHDATE DATE, BIRTHTIME TIME ); INSERT INTO BIRTH VALUES ('KIM', '1999-08-11', '17:55:13'), ('LEE', '1998-12-18', '10:12:01'); SELECT * FROM BIRTH;
CURDATE / CURTIME / NOW
-
현재 날짜 반환 (YYYY-MM-DD) : SELECT CURDATE();
-
현재 시간 반환 (HH:MM:SS) : SELECT CURTIME();
-
현재 날짜/시간 반환 (YYYY-MM-DD HH:MM:SS) : SELECT NOW();
DAY / DAYNAME / DAYOFWEEK / DAYOFYEAR
-
한달 중 날짜(며칠인지) 반환 : SELECT DAY(column_name) FROM table_name;
-
요일 반환 (Sunday ~ Saturday) : SELECT DAYNAME(column_name) FROM table_name;
-
요일을 숫자로 반환
-
일요일 : 1 ~ 토요일 : 7
-
SELECT DAY(column_name) FROM table_name;
-
-
일년 중 날짜를 숫자로 반환 : SELECT DAYOFYEAR(column_name) FROM table_name;
DATE_SUB / DATE_ADD
-
DATE_SUB(기준날짜, INTERVAL 뺄날짜);
-
DATE_ADD(기준날짜, INTERVAL 더할날짜);
-
ex)
SELECT DATE_ADD(NOW(), INTERVAL 1 MONTH); SELECT DATE_SUB(NOW(), INTERVAL 1 MINUTE);
TIMESTAMP
-
DATETIME vs TIMESTAMP
-
datetime : 문자형 / timestamp : 숫자형으로 변환되어 저장
-
datetime : 8byte / timestamp : 4byte
-
datetime : ‘1000-01-01’ ~ ‘9999-12-31’ / timestamp : ‘1970-01-01 00:00:01.000000’ ~ ‘2038-01-19 03:14:07.999999’
-
-
ex)
CREATE TABLE comments ( content CHAR(100), created_at TIMESTAMP DEFAULT NOW() ); INSERT INTO comments (content) VALUES('mysql timestamp');
DATE_FORMAT
-
DATE_FORMAT(날짜, 형식) : 지정한 형식으로 날짜/시간 출력
-
ex)
SELECT DATE_FORMAT(NOW(),'%Y-%m-%d'); # '2021-11-19' SELECT DATE_FORMAT(NOW(),'%Y년%m월%d일 %H시%i분%S초'); # '2021년11월19일 15시20분25초'