[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(날짜, 형식) : 지정한 형식으로 날짜/시간 출력

  • DATE_FORMAT Specifier

  • 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초'
    

Categories:

MySQL