티스토리 뷰

Database

[Database] data types

daze1002 2025. 5. 18. 21:52
반응형

🧬 MySQL 데이터 타입 (DATA TYPES)

주요 키워드: MySQL, 데이터 타입, 형변환, 문자열, 숫자, 날짜, JSON


🧭 개요

MySQL은 숫자형, 문자열, 날짜/시간, 이진, 열거형 등 다양한 데이터 타입을 제공합니다.
적절한 타입을 선택하면 저장 공간을 효율적으로 사용할 수 있고, 데이터 무결성도 확보할 수 있습니다.


1️⃣ 데이터 형식의 종류

📌 1-1-1. 숫자 데이터 형식

  • FLOAT, DOUBLE은 근사값을 저장하므로 정확한 소수 표현이 필요한 경우 DECIMAL 사용 권장
데이터 형식 바이트 설명
TINYINT 1 -128 ~ 127
SMALLINT 2 -32,768 ~ 32,767
MEDIUMINT 3 -8백만 ~ +8백만
INT 4 약 -21억 ~ +21억
BIGINT 8 약 ±900경
FLOAT 4 소수점 이하 약 7자리까지
DOUBLE 8 소수점 이하 약 15자리까지
DECIMAL(m,d) 5~17 고정 소수점 수 (정확한 수 계산용)

📌 1-1-2. 문자/이진/열거형 데이터 형식

  • CHAR: 고정 길이, VARCHAR: 가변 길이
  • TEXT, BLOB: 대용량 문자열/이진 데이터
  • ENUM, SET: 열거형/집합형 값 저장에 활용
데이터 형식 바이트 설명
CHAR(n) 1~255 고정길이 문자열
VARCHAR(n) 1~65535 가변길이 문자열
TINYTEXT 1~255 최대 255자
TEXT 1~65535 일반 텍스트
LONGTEXT 최대 4GB 대용량 텍스트
ENUM(...) 1~2 열거형
SET(...) 최대 8 집합형

📌 1-1-3. 날짜 및 시간 데이터 형식

형식 바이트 설명
DATE 3 'YYYY-MM-DD'
TIME 3 'HH:MM:SS'
DATETIME 8 'YYYY-MM-DD HH:MM:SS'
TIMESTAMP 4 UTC 기준 시간 저장
YEAR 1 'YYYY' 형식 연도

📌 1-1-4. 기타 형식

형식 설명
GEOMETRY 공간 데이터 (점, 선, 다각형 등)
JSON JSON 객체 저장 (8바이트)

2️⃣ 형변환 (Type Conversion)

🔹 2-1. 명시적 형변환 (Explicit Conversion)

SELECT AVG(menu_price) FROM tbl_menu;
-- 평균 메뉴 가격이 소수로 출력됨
SELECT CAST(AVG(menu_price) AS SIGNED INTEGER) AS '평균 메뉴 가격' FROM tbl_menu;
-- 소수점 제거 후 정수로 평균 출력됨
SELECT CONVERT(AVG(menu_price), SIGNED INTEGER) AS '평균 메뉴 가격' FROM tbl_menu;
-- 위와 동일한 결과
SELECT CAST('2023$5$30' AS DATE); -- '2023-05-30'
SELECT CAST('2023/5/30' AS DATE); -- '2023-05-30'
SELECT CAST('2023%5%30' AS DATE); -- '2023-05-30'
SELECT CAST('2023@5@30' AS DATE); -- '2023-05-30'
-- 다양한 구분자를 가진 날짜 문자열도 DATE로 파싱됨
SELECT CONCAT(CAST(menu_price AS CHAR(5)), '원') FROM tbl_menu;
-- menu_price를 문자열로 변환 후 '원'과 결합
SELECT category_code, CONCAT(CAST(SUM(menu_price) AS CHAR(10)), '원')
FROM tbl_menu
GROUP BY category_code;
-- 카테고리별 총합 가격을 문자열로 변환하여 '원'을 붙여 출력

🔹 2-2. 암시적 형변환 (Implicit Conversion)

SELECT '1' + '2';
-- 문자열 '1', '2'가 정수로 변환되어 3 출력
SELECT CONCAT(menu_price, '원') FROM tbl_menu;
-- menu_price가 문자열로 암시적 변환되어 '원'과 연결됨
SELECT 3 > 'MAY';
-- 'MAY' → 0으로 변환되어 3 > 0 → TRUE
SELECT 5 > '6MAY';
-- '6MAY' → 6으로 변환되어 5 > 6 → FALSE
SELECT 5 > 'M6AY';
-- 'M6AY' → 0으로 변환되어 5 > 0 → TRUE
SELECT '2023-5-30';
-- 문자지만 DATE 포맷으로 인식되며 DATE 타입으로 처리됨

🔍 요약

  • 정확한 계산이 필요한 경우 DECIMAL, 간단한 수치는 INT/FLOAT
  • 문자열은 VARCHAR, 대용량은 TEXT, 이진 데이터는 BLOB
  • 날짜는 DATE, DATETIME, 타임존 고려 시 TIMESTAMP
  • 형변환은 CAST(), CONVERT() 사용
  • MySQL은 자동으로 타입을 변환하는 암시적 형변환도 지원

📎 참고 자료


'Database' 카테고리의 다른 글

[Database] JOIN  (0) 2025.05.18
[Database] MySQL 내장 함수  (0) 2025.05.18
[Database] DML  (0) 2025.05.18
[Database] GROUPING  (0) 2025.05.18
[Database] LIMIT  (0) 2025.05.18