VARCHAR() VS TEXT() 뭐가 다를까? ( •̀ .̫ •́ )

문자열의 데이터 타입을 지정할 때 바로 이 두 타입에 대해서 고민을 하실 것 같은데요, 저도 찾아보다가 당근 기술블로그에 정리가 된 좋은 사례를 발견하여 공유드려봅니다! :-)


VARCHAR 타입 : 길이 설정에 주의해야 함

  • MYSQL 서버에서는 VARCHAR 컬럼이 너무 큰 길이를 사용하면 다른 컬럼들이 사용할 수 있는 최대 공간의 크기에 영향을 받게 된다. 따라서 VARCHAR 타입의 최대 저장 길이 설정 시에 공간을 아껴서 설정해야 한다.

TEXT 타입 : 길이 제한이 사라짐

  • TEXT 타입은 저장 가능 길이도 훨씬 크고, 테이블 생성 시 VARCHAR처럼 최대 길이 제한을 정의하지 않아도 된다.

    그런데 왜 우리가 모델링하는 대부분의 테이블에서 문자열 저장용 컬럼으로 VARCHAR를 사용할까? ಠ_ಠ

    • 일반적인 RDBMS에서 TEXT나 BLOB와 같은 대용량 데이터 저장 시에 저장하는 컬럼 타입을 LOB(Large Object)라고 하는데, 이들은 off-page라는 외부 공간에 저장하게 됨. 그러나, MYSQL 서버에서는 LOB 타입의 컬럼을 길이가 길어서 저장 공간이 많이 필요할 때만 Off-Page로 저장함. 이는 레코드 포멧에 따라 조금씩 다르게 작동하기도 함 VARCHAR 타입의 경우도 칼럼에 저장된 값이 크면 Off-Page로 저장함.

    • MYSQL은 스토리지 엔진과 Handler API 를 이용해 데이터를 주고 받는데 메모리 포인터를 통해 레코드 데이터를 주고 받음. 메모리 객체는 실제 레코드의 데이터 크기와 상관없이 최대 크기로 메모리를 할당함. 즉, VARCHAR는 최대 크기가 설정되기 때문에 메모리 공간을 미리 버퍼에 할당할 수 있음! 따라서 TEXT, BLOB은 메모리 공간이 미리 할당되지 않아서 매번 읽고 쓸 때마다 메모리가 할당되어야 함

요약해보면.. (๑•̀ㅂ•́)و✧

VARCHAR

  • 최대 길이가 상대적으로 큰 경우

  • 테이블 데이터를 읽을 때 항상 그 컬럼이 필요한 경우

  • DBMS 서버 메모리가 상대적으로 충분한 경우

TEXT

  • 최대 길이가 상대적으로 큰 경우

  • 테이블에 길이가 긴 문자열 타입 컬럼이 많이 필요한 경우

  • 테이블 데이터를 읽을 때 그 컬럼이 자주 필요하지 않은 경우


원 글은 아래 링크에서 확인 하실 수 있습니다!

https://medium.com/daangn/varchar-vs-text-230a718a22a1

VARCHAR vs TEXT

Medium

VARCHAR vs TEXT

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2024년 4월 9일 오전 7:07

 • 

저장 16조회 2,702

댓글 0