mysql (5) string data type

Creating the dots·2021년 10월 5일
0

project-1-dagachi

목록 보기
5/11

스키마를 작성하면서 데이터타입으로 int, varchar(255), date 등을 가장 많이 사용했다. 그러다가 게시물과 같이 많은 글을 쓰는 경우 어떤 데이터타입을 사용해야하는지를 찾아보다가 String 데이터타입의 종류로 varchar, char, text, mediumtext, longtext 등을 알게 되었다.


String Data Types

  • CHAR(size)
    • 고정된 사이즈를 갖는다. 따라서, CHAR(8)로 선언하면 글자의 갯수와 상관없이 8바이트의 공간을 차지한다.
    • 고정된 크기를 가짐으로써 데이터를 낭비할 수도 있지만, 추후에 연산이 필요없어 검색속도가 VARCHAR에 비해 빠르다.
    • 문자, 숫자, 특수문자 등을 포함할 수 있다. 사이즈는 0부터 255가 가능하며 디폴트는 1이다.

  • VARCHAR(size)
    • 가변하는 사이즈를 갖는다.
    • 0부터 65535까지 maxSize를 설정할 수 있다. VARCHAR(8)로 선언하면 글자를 1글자 넣으면 1바이트, 2개 넣으면 2바이트의 공간을 차지한다.
    • 1+c 바이트(for maxSizd<=255) 또는 1+2바이트(for 256<=maxSize<=65535)만큼의 디스크 용량을 차지한다. (여기서 c는 저장된 글자수)
    • 문자, 숫자, 특수문자 등을 포함할 수 있다.
    • 인덱스의 일부가 될 수 있다.

  • TEXT(size)
    • 가변하는 사이즈를 갖는다.
    • maxSize는 65535글자로 고정되어있다. (maxSize를 설정할 수 없다)
      Holds a string with a maximum length of 65,535 bytes
    • 2+c 바이트만큼의 디스크 용량을 차지한다. (여기서 c는 저장된 글자수)
    • 인덱스의 일부가 될 수 없다.

  • MEDIUMTEXT
    • 최대 16,777,215 글자의 문자열을 저장한다.
      Holds a string witha maximum length of 16,777,215 characters

  • LONGTEXT
    • 최대 4,294,967,295 글자의 문자열을 저장한다.
      Holds a string with a maximum length of 4,294,967,295 characters

Text와 Varchar 성능 차이

blob 또는 text 칼럼은 메모리 엔진에서 지원하지 않는 데이터테입이기 때문에 디스크의 임시 테이블에 복사되어 저장된다. 이 점 때문에 쿼리문을 사용할때, 디스크에 저장된 테이블에서 처리해야하는데, 이는 성능에서 패널티를 발생시킨다. 따라서 이 두 데이터타입은 필요한 경우에만 사용되어야 한다.

Instances of BLOB or TEXT columns in the result of a query that is processed using a temporary table causes the server to use a table on disk rather than in memory because the MEMORY storage engine does not support those data types (see Section 8.4.4, “Internal Temporary Table Use in MySQL”). Use of disk incurs a performance penalty, so include BLOB or TEXT columns in the query result only if they are really needed.


text는 메모리 엔진이 아닌 디스크에 저장되어 쿼리문을 사용할때 성능이 떨어지므로, 경우에 따라 varchar 또는 char를 사용해야겠다.

게시물 내용(content)를 어떤 데이터타입으로 해야할지 생각해보면서 찾아보며 공부한 내용인데, varchar를 쓰는게 적절하다는 생각이 든다.

reference

profile
어제보다 나은 오늘을 만드는 중

0개의 댓글