공부/DB

[DB] CHAR과 VARCHAR

min1119 2023. 11. 7. 01:12
CHAR
  • CHAR는 고정 사이즈로
  • 무조건 처음 선언된 크기만큼 소모된다.
  • 문자열을 채우고 남는 공간은 공백으로 채우게 된다.
  • 값을 받아올 때는 공백이 자동으로 제거됨
    • 공백까지 읽고 싶다면 PAD_CHAR_TO_FULL_LENGTH 모드 활성화 필요
  • 고정길이 데이터 컬럼에 적합
  • CHAR열의 최대 크기는 255 바이트
VARCHAR
  • 가변 길이
  • 데이터 삽입 시 255글자 이하에는 1바이트, 이상에는 2바이트의 추가 공간 필요
  • 길이 정보 + 실제 데이터로 이루어져 있다.
  • 길이가 다양한 컬럼, 혹은 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합
  • VARCHAR로 저장된 값을 변경하려고 할 때, 변경할 값이 저장된 사이즈보다 크다면 새로운 저장 영역에 새로 할당해야 하므로 데이터 파편화가 발생할 수 있다.
  • 데이터 길이를 확인하는 연산을 추가로 거쳐야 한다.
  • VARCHAR열의 최대 크기는 65,535 바이트

MySQL에서의 사용
  • MySQL 4.1 이후 버전부터는 CHAR(n), VARCHAR(n)에서 n은 바이트가 아니라 글자수이다.
  • MySQL 5.0.3 버전부터 VARCHAR 열의 최대 크기가 255 바이트에서 65,535 바이트로 변경되었다.
  • MySQL 5.5.3에 utf8mb4 charset이 추가되면서 4바이트( Emoji😆) 문자열 사용 가능
  • VARCHAR의 최대 글자수는 charset에 따라 달라질 수 있다.
  • 4자 이하의 VARCHAR는 CHAR로 자동 변환
  • 테이블 안에 VARCHAR, TEXT, BLOB과 같은 가변길이 데이터가 하나라도 있을 경우 3자 이상의 CHAR 컬럼이 자동으로 VARCHAR로 변환
실제 성능..?
  • 이론상으로는 VARCHAR가 블럭 파편화나 길이 확인 연산 등으로 인해 CHAR가 성능이 더 좋다고 한다.
  • 그러나 사람이 체감할 만한 정도의 차이는 아니라고 함.
  • 실제 개발 시의 편의성이나 호환성은 VARCHAR가 높다.
  • 상황에 따라 잘 취사선택 하도록 하자.

2023.11.22 - [DB] - [DB] VARCHAR와 TEXT