자주 사용하는 데이터타입들을 정리해봤습니다. 깊은 내용은 담지 않았습니다. 또 사용되는 데이터타입이 있을 때마다 추가해서 정리할게요.

  • VARCHAR(M)

    가변 길이의 STRING. M은 character의 최대 길이를 나타내며 최대 65,536 까지 사용 가능합니다. 하지만 하나의 레코드에서 TEXT, BLOB을 제외한 칼럼의 전체 크기가 64KB를 넘을 수 없으므로 만약 다른 칼럼에서 40KB를 사용한다면 VARCHAR 타입은 최대 24KB만 쓸 수 있습니다. 한글은 한 글자당 2Byte를 사용하고 UTF-8의 문자는 최대 3 Byte를 사용하므로 실제 저장 가능한 글자 수를 잘 계산해야합니다.

  • CHAR(M)

    고정 길이의 STRING. 최대 255 byte까지 가능합니다. VARCHAR를 쓸지 CHAR를 쓸지 결정할때는 아래 두가지를 고려하는 것이 좋습니다.

    • 길이가 고정되어 있는가?(예를 들어 주민등록번호, 핸드폰번호)
    • 자주 업데이트 되는가?. 저장 구조 때문에 자주 업데이트 된다면 고정길이를 사용하는 것이 좋습니다.
  • BLOB

    커다란 바이너리 데이터를 저장할 때 사용. 최대 크기에 따라 TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB로 나누어집니다. 문자셋을 가지고 있지 않아서 정렬시 바이트 숫자 기반으로 정렬합니다.

  • TEXT

    커다란 텍스트 데이터를 저장할 때 사용. 최대 크기에 따라 TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT가 있습니다. 문제 셋을 가지고 있어서 문자 셋의 Collation 기반으로 값을 저장하고 비교합니다. Collation이란 문자열 칼럼의 값에 대한 비교나 정렬 순서를 위한 규칙을 의미합니다.

  • DECIMAL(M, N)

    정확한 소수를 표현할 필요가 있을 때 사용합니다. FLOAT, DOUBLE 과 같은 부동 소수점에서 유효 범위 이외의 값은 보장이 안됩니다. 따라서 고정된 소수점까지 정확하게 관리해야 할 때는 DECIMAL을 사용합니다. M이 총 자릿수를 나타내며 N은 그중 소수부의 최대 자릿수를 나타냅니다. 즉, 정수부는 M - N 자릿수를 가질 수 있습니다.

  • INT

    정수를 저장할 때 사용합니다. 크기에 따라 TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT를 사용할 수 있습니다. 성능면에서 정수만을 사용할때는 DECIMAL이 아니라 INT를 사용하는 것이 좋습니다.

  • DATE

    날짜를 표시할때 사용합니다. YYYY-MM-DD 형식입니다.

  • DATETIME

    날짜와 시간을 표시할때 사용합니다. YYYY-MM-DD HH:MM:SS 형식입니다.

  • TIMESTAMP

    DATETIME과 같은 형식을 가지지만 1970년 ~ 2038년 1월 19일 까지 사용가능합니다.