Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 데이터 유형 완벽 가이드: 숫자형·날짜·시간형·문자열 3가지 그룹

MySQL은 다양한 데이터 유형을 제공하며, 이를 크게 숫자형(Numeric), 날짜·시간형(Date and Time), 문자열(String) 세 가지 그룹으로 분류합니다. 각 그룹별 주요 유형과 특징을 자세히 살펴보겠습니다.

1. 숫자형(NUMERIC) 데이터 유형

MySQL은 표준 ANSI SQL 숫자 데이터 유형을 모두 지원합니다. 따라서 다른 데이터베이스 시스템에서 MySQL로 넘어온 개발자라면 익숙하게 사용할 수 있습니다.

정수 유형

아래 정수 유형은 모두 부호 있는(SIGNED) 값과 부호 없는(UNSIGNED) 값으로 선언할 수 있습니다. UNSIGNED로 선언하면 음수를 저장할 수 없는 대신 양수 표현 범위가 두 배로 넓어집니다.

유형SIGNED 범위UNSIGNED 범위최대 표시 폭
TINYINT-128 ~ 1270 ~ 2554자리
SMALLINT-32,768 ~ 32,7670 ~ 65,5355자리
MEDIUMINT-8,388,608 ~ 8,388,6070 ~ 16,777,2159자리
INT-2,147,483,648 ~ 2,147,483,6470 ~ 4,294,967,29511자리
BIGINT-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8070 ~ 18,446,744,073,709,551,61520자리

실수 유형

  • FLOAT(M,D) – 단정밀도 부동소수점 수로, UNSIGNED로 선언할 수 없습니다. 표시 길이(M)와 소수 자릿수(D)를 지정할 수 있으며, 생략하면 기본값 10,2가 적용됩니다(전체 10자리 중 소수점 아래 2자리). FLOAT의 소수 정밀도는 최대 24자리입니다.
  • DOUBLE(M,D) – 배정밀도 부동소수점 수로, 역시 UNSIGNED로 선언할 수 없습니다. M과 D를 지정할 수 있으며 기본값은 16,4입니다. 소수 정밀도는 최대 53자리까지 가능합니다. REAL은 DOUBLE의 동의어입니다.
  • DECIMAL(M,D) – 언팩(unpacked) 방식의 소수로, UNSIGNED로 선언할 수 없습니다. 언팩 방식에서는 소수 자릿수 하나당 1바이트를 사용합니다. M과 D 지정은 필수입니다. NUMERIC은 DECIMAL의 동의어입니다.

2. 날짜 및 시간(DATE AND TIME) 유형

MySQL에서 제공하는 날짜·시간 데이터 유형은 다음과 같습니다.

  • DATE – 1000-01-01부터 9999-12-31까지의 날짜를 저장합니다. 기본 형식은 'YYYY-MM-DD'이며, 예를 들어 1984년 1월 17일은 1984-01-17로 저장됩니다.
  • DATETIME – 1000-01-01 00:00:00부터 9999-12-31 23:59:59까지의 날짜와 시간을 함께 저장합니다. 기본 형식은 'YYYY-MM-DD HH:MM:SS'이며, 예를 들어 1984년 1월 17일 오후 2시 20분은 1984-01-17 14:20:00으로 저장됩니다.
  • TIMESTAMP – '1970-01-01 00:00:01'부터 '2038-01-19 08:44:07'까지의 날짜와 시간을 지원합니다. 사용 방법은 DATETIME과 유사하지만 저장 범위가 더 좁습니다.
  • TIME – 시간을 'HH:MM:SS' 형식으로 저장합니다.
  • YEAR(M) – 연도를 2자리 또는 4자리 형식으로 저장합니다. YEAR(2)로 지정하면 1970~2069년(70~69), YEAR(4)로 지정하면 1901~2155년을 나타낼 수 있습니다. 기본 길이는 4입니다.

3. 문자열(STRING) 유형

숫자나 날짜 유형도 유용하지만, 실제로 저장하는 대부분의 데이터는 문자열 형태입니다. MySQL에서 자주 사용되는 문자열 데이터 유형은 다음과 같습니다.

  • CHAR(M) – 1~255자의 고정 길이 문자열입니다(예: CHAR(5)). 저장 시 지정된 길이보다 짧으면 오른쪽을 공백으로 채웁니다. 길이 지정은 필수가 아니며, 기본값은 1입니다.
  • VARCHAR(M) – 1~65,535자의 가변 길이 문자열입니다(예: VARCHAR(25)). VARCHAR 필드를 생성할 때는 반드시 길이를 지정해야 합니다.
  • BLOB / TEXT – 최대 65,535자까지 저장할 수 있는 필드입니다. BLOB(Binary Large Object)은 이미지나 각종 파일처럼 대량의 바이너리 데이터를 저장하는 데 사용됩니다. 두 유형의 차이는 정렬·비교 시 BLOB은 대소문자를 구분하고 TEXT는 구분하지 않는다는 점입니다. 길이는 지정하지 않습니다.
  • TINYBLOB / TINYTEXT – 최대 255자까지 저장할 수 있는 BLOB/TEXT 컬럼입니다. 길이는 지정하지 않습니다.
  • MEDIUMBLOB / MEDIUMTEXT – 최대 16,777,215자까지 저장할 수 있는 BLOB/TEXT 컬럼입니다. 길이는 지정하지 않습니다.
  • LONGBLOB / LONGTEXT – 최대 4,294,967,295자까지 저장할 수 있는 BLOB/TEXT 컬럼입니다. 길이는 지정하지 않습니다.
  • ENUM – 열거형으로, 미리 정의한 목록에서 값을 선택해야 하는 유형입니다(NULL 허용 가능). 예를 들어 필드에 'A', 'B', 'C' 중 하나만 입력되길 원한다면 ENUM('A','B','C')로 정의하며, 이후 이 필드에는 해당 값들(또는 NULL)만 저장될 수 있습니다.

마무리

데이터 유형을 올바르게 선택하면 저장 공간을 절약하고 쿼리 성능도 향상시킬 수 있습니다. 저장할 값의 범위와 성격(정수/실수, 날짜/시간, 텍스트/바이너리)을 먼저 파악한 뒤, 해당 값들을 충분히 담을 수 있는 가장 작은 유형을 선택하는 것이 좋습니다.