목차
- 숫자 데이터 유형
- 텍스트/문자열 데이터 유형
- 날짜/시간 데이터 유형
- geometry, json 데이터 유형
숫자 데이터 유형
MySQL은 데이터베이스에 다양한 종류의 숫자 값을 저장하기 위해 여러 가지 숫자 데이터 유형을 제공합니다. 이러한 데이터 유형은 정수, 부동 소수점, 고정 소수점의 세 가지 범주로 그룹화할 수 있습니다.
- 정수(Integer) 데이터 유형
MySQL은 저장 크기와 값 범위가 각각 다른 네 가지 정수 데이터 유형을 지원합니다.
- TINYINT: -128~127(부호) 또는 0~255(부호 없음) 사이의 값을 저장할 수 있는 매우 작은 정수입니다. 1바이트의 저장 공간을 차지합니다.
- SMALLINT: -32,768~32,767(부호) 또는 0~65,535(부호 없음) 사이의 값을 저장할 수 있는 작은 정수입니다. 2바이트의 저장 공간을 차지합니다.
- MEDIUMINT: -8,388,608~8,388,607(부호) 또는 0~16,777,215(부호 없음) 사이의 값을 저장할 수 있는 중간 크기의 정수입니다. 3바이트의 저장 공간을 차지합니다.
- INT: -2,147,483,648 ~ 2,147,483,647(부호) 또는 0 ~ 4,294,967,295(부호 없음) 사이의 값을 저장할 수 있는 일반 정수입니다. 4바이트의 저장 공간을 차지합니다.
- BIGINT: -9,223,372,036,854,775,808에서 9,223,372,036,854,775,807(부호) 또는 0에서 18,446,744,073,709,551,615(부호 없음) 사이의 값을 저장할 수 있는 큰 정수입니다. 8바이트의 저장 공간을 차지합니다.
- TINYINT: -128~127(부호) 또는 0~255(부호 없음) 사이의 값을 저장할 수 있는 매우 작은 정수입니다. 1바이트의 저장 공간을 차지합니다.
- 부동 소수점(Floating-point) 데이터 유형
부동 소수점 데이터 유형은 대략적인 숫자 값을 저장하므로 정확한 정밀도가 필요하지 않은 계산에 유용합니다. MySQL은 두 가지 부동 소수점 유형을 지원합니다:
- FLOAT: 단정밀도 부동 소수점 숫자로, ~1.18e-38 ~ ~3.4e+38의 값을 7자리 정밀도로 저장할 수 있습니다. 4바이트의 저장 공간을 차지합니다.
- double: 2.23e-308 ~ ~1.8e+308의 값을 15자리 정밀도로 저장할 수 있는 배정밀도 부동소수점 수입니다. 8바이트의 저장 공간을 차지합니다.
- FLOAT: 단정밀도 부동 소수점 숫자로, ~1.18e-38 ~ ~3.4e+38의 값을 7자리 정밀도로 저장할 수 있습니다. 4바이트의 저장 공간을 차지합니다.
- 고정 소수점(Fixed-point) 데이터 유형:
MySQL은 소수점 뒤에 지정된 자릿수가 있는 정확한 숫자 값을 저장하는 고정 소수점 숫자도 지원합니다. 고정 소수점 유형은 하나입니다:
- DECIMAL(M, D): 총 자릿수가 M인 정확한 숫자 값이며, 이 중 소수점 뒤의 자릿수는 D입니다. M은 1에서 65 사이이고 D는 0에서 30 사이일 수 있습니다. M의 기본값은 10이고 D는 0입니다. DECIMAL의 저장 요구 사항은 M과 D의 값에 따라 달라집니다.
- DECIMAL(M, D): 총 자릿수가 M인 정확한 숫자 값이며, 이 중 소수점 뒤의 자릿수는 D입니다. M은 1에서 65 사이이고 D는 0에서 30 사이일 수 있습니다. M의 기본값은 10이고 D는 0입니다. DECIMAL의 저장 요구 사항은 M과 D의 값에 따라 달라집니다.
테이블에서 열을 정의할 때 UNSIGNED 속성을 사용하여 열에 부호 있는 값 또는 부호 없는 값을 허용할지 여부를 지정할 수 있습니다. 부호 없는 값은 음수를 저장할 수 없으므로 주어진 숫자 유형에 대해 저장할 수 있는 최대 양수 값의 두 배가 됩니다.
텍스트/문자열 데이터 유형
MySQL은 데이터베이스에 텍스트 및 문자열 값을 저장하기 위한 여러 문자 데이터 유형을 제공합니다. MySQL의 기본 문자 데이터 유형은 다양한 크기와 저장 특성을 가진 CHAR, VARCHAR 및 TEXT입니다:
- CHAR
지정된 길이(N)의 문자열을 저장하는 데 사용되는 고정 길이 문자 데이터 유형으로, N은 1에서 255자 사이일 수 있습니다. CHAR 열은 짧은 문자열을 후행 공백으로 채우거나 긴 문자열을 지정된 길이에 맞게 잘라내는 방식으로 정확히 N자의 문자열을 저장합니다. CHAR는 국가 코드나 우편 번호와 같이 길이가 일정한 문자열을 저장하는 데 적합합니다. - VARCHAR
지정된 최대 길이(M)의 문자열을 저장하는 데 사용되는 가변 길이 문자 데이터 유형으로, M은 1~65,535자 사이일 수 있습니다(사용되는 최대 행 크기 및 문자 집합에 따라 실제 최대 길이는 이보다 짧을 수 있음). CHAR 열과 달리 VARCHAR 열은 후행 공백으로 짧은 문자열을 채우지 않으며 문자열 값과 함께 정확한 문자열 길이를 저장합니다. VARCHAR는 이름이나 주소와 같이 가변 길이의 문자열을 저장하는 데 적합합니다. - TEXT
큰 텍스트 값을 저장하는 데 사용되는 가변 길이 문자 데이터 유형입니다. MySQL은 최대 길이와 저장 요구 사항이 다른 네 가지 유형의 TEXT 열을 제공합니다:
- TINYTEXT: 최대 255바이트의 텍스트를 저장할 수 있는 작은 텍스트 열입니다. 저장된 텍스트의 최대 길이는 사용되는 문자 집합에 따라 다릅니다.
- TEXT: 최대 65,535바이트의 텍스트를 저장할 수 있는 중간 크기의 텍스트 열입니다. 저장된 텍스트의 최대 길이는 사용되는 문자 집합에 따라 다릅니다.
- MEDIUMTEXT: 최대 16,777,215바이트의 텍스트를 저장할 수 있는 더 큰 텍스트 열입니다. 저장된 텍스트의 최대 길이는 사용되는 문자 집합에 따라 다릅니다.
- LONGTEXT: 최대 4,294,967,295바이트의 텍스트를 저장할 수 있는 가장 큰 텍스트 열입니다. 저장된 텍스트의 최대 길이는 사용되는 문자 집합에 따라 다릅니다.
- TINYTEXT: 최대 255바이트의 텍스트를 저장할 수 있는 작은 텍스트 열입니다. 저장된 텍스트의 최대 길이는 사용되는 문자 집합에 따라 다릅니다.
- BINARY
지정된 길이(N)의 이진 데이터를 저장하는 데 사용되는 고정 길이 이진 데이터 유형으로, N은 1바이트에서 255바이트 사이일 수 있습니다. CHAR 데이터 유형과 유사하게, BINARY 열은 짧은 이진 데이터에 후행 0바이트(0x00)를 추가하거나 긴 이진 데이터를 지정된 길이에 맞게 잘라내는 방식으로 정확히 N바이트의 값을 저장합니다. BINARY는 해시 또는 고정 길이 인코딩과 같은 고정 길이 바이너리 데이터를 저장하는 데 적합합니다. - VARBINARY
지정된 최대 길이(M)의 바이너리 데이터를 저장하는 데 사용되는 가변 길이 바이너리 데이터 유형으로, M은 1~65,535바이트 사이가 될 수 있습니다. VARCHAR 데이터 유형과 마찬가지로 VARBINARY 열은 더 짧은 이진 데이터에 패딩을 하지 않으며 이진 값과 함께 정확한 데이터 길이를 저장합니다. VARBINARY는 암호화된 문자열이나 압축 데이터와 같이 가변 길이의 이진 데이터를 저장하는 데 적합합니다. - BLOB
큰 바이너리 데이터 값을 저장하는 데 사용되는 BLOB(바이너리 대용량 객체) 데이터 유형입니다. MySQL은 최대 길이와 저장소 요구 사항이 다른 네 가지 유형의 BLOB 열을 제공합니다:
- TINYBLOB: 최대 255바이트의 바이너리 데이터를 저장할 수 있는 작은 바이너리 열입니다.
- BLOB: 최대 65,535바이트의 바이너리 데이터를 저장할 수 있는 중간 크기의 바이너리 열입니다.
- MEDIUMBLOB: 최대 16,777,215바이트의 바이너리 데이터를 저장할 수 있는 더 큰 바이너리 열입니다.
- LONGBLOB: 가장 큰 바이너리 열로, 최대 4,294,967,295바이트의 바이너리 데이터를 저장할 수 있습니다.
- TINYBLOB: 최대 255바이트의 바이너리 데이터를 저장할 수 있는 작은 바이너리 열입니다.
- ENUM
미리 정의된 값 목록에서 하나의 값을 저장하는 데 사용되는 열거형 데이터 유형입니다. ENUM 열을 정의할 때는 유효한 문자열 값의 목록을 지정해야 합니다. ENUM 열의 저장 요구 사항은 열거형의 요소 수에 따라 1바이트 또는 2바이트입니다(최대 65,535개 요소). ENUM은 요일, 사용자 역할 또는 주문 상태와 같이 잘 정의된 작은 옵션 집합으로 값을 저장하는 데 적합합니다. - SET
미리 정의된 값 목록에서 값의 조합을 저장하는 데 사용되는 집합 데이터 유형입니다. SET 열을 정의할 때는 유효한 문자열 값 목록을 지정해야 합니다. SET 열은 최대 64개의 고유 값을 저장할 수 있으며 쉼표로 구분된 형식으로 목록의 여러 값을 포함할 수 있습니다. SET 열의 저장 요구 사항은 집합의 요소 수(최대 64개 요소)에 따라 1, 2, 3, 4 또는 8바이트입니다. SET은 사용자 권한이나 제품 기능과 같은 속성이나 플래그의 조합을 저장하는 데 적합합니다.
날짜/시간 데이터 유형
MySQL은 날짜 및 시간 값을 다양한 형식으로 저장하기 위한 여러 데이터 유형을 제공합니다.
- DATE
이 데이터 유형은 날짜 값을 'YYYY-MM-DD' 형식으로 저장하며, 여기서 'YYYY'는 4자리 연도를, 'MM'은 2자리 월(01-12)을, 'DD'는 2자리 일(01-31)을 나타냅니다. DATE 데이터 유형의 유효한 날짜 범위는 '1000-01-01'부터 '9999-12-31'까지이며, 3바이트의 저장 공간을 차지합니다. - TIME
이 데이터 유형은 시간 값을 'hh:mm:ss' 형식으로 저장하며, 여기서 'hh'는 시(23), 'mm'는 분(00-59), 'ss'는 초(00-59)를 나타냅니다. TIME 데이터 유형의 유효한 시간 범위는 '-838:59:59'부터 '838:59:59'까지이며, 3바이트의 저장 공간을 차지합니다. - DATETIME
이 데이터 유형은 결합된 날짜 및 시간 값을 'YYYY-MM-DD hh:mm:ss' 형식으로 저장합니다. DATETIME 데이터 유형의 유효한 범위는 '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지이며, '9999-12-31 23:59:59'까지의 값은 5바이트, '1000-01-01 00:00:00' 이후의 값은 8바이트의 저장 공간을 차지합니다. - TIMESTAMP
이 데이터 유형은 날짜 및 시간 값을 결합하여 'YYYY-MM-DD hh:mm:ss' 형식으로 저장하며, DATETIME 데이터 유형과 유사합니다. 그러나 TIMESTAMP 값은 서로 다른 표준 시간대 간에 자동 변환이 가능하도록 유닉스 에포크('1970-01-01 00:00:00' UTC) 이후의 초 수로 저장됩니다. TIMESTAMP 데이터 유형의 유효한 범위는 '1970-01-01 00:00:01' UTC부터 '2038-01-19 03:14:07' UTC까지이며, 4바이트의 저장 공간을 차지합니다. - YEAR
이 데이터 유형은 연도 값을 2자리(YY) 또는 4자리(YYYY) 형식으로 저장합니다. 4자리 형식의 유효한 범위는 1901년부터 2155년까지이며, 2자리 형식은 1970년부터 2069년까지 연도를 나타내는 70부터 69까지의 값을 저장할 수 있습니다. YEAR 데이터 유형은 1바이트의 저장 공간을 차지합니다.
날짜 및 시간 데이터 유형으로 작업할 때 NOW(), CURDATE(), CURTIME(), DATE_ADD(), DATE_SUB() 등과 같은 다양한 MySQL 함수를 사용하여 날짜 및 시간 값을 조작, 비교 및 계산할 수 있습니다.
geometry, json 데이터 유형
MySQL은 공간 데이터를 위한 지리 데이터와 JSON 데이터를 저장하기 위한 JSON이라는 두 가지 추가 데이터 유형을 지원합니다. 다음은 이러한 데이터 유형에 대한 개요입니다:
- GEOMETRY
지리 또는 기하학적 개체를 나타내는 점, 선, 다각형과 같은 공간 데이터를 저장하는 데 사용되는 데이터 유형입니다. 공간 데이터 유형은 지리 정보 시스템(GIS) 및 공간 데이터를 다루는 기타 애플리케이션에 유용합니다. MySQL은 다양한 유형의 공간 데이터를 위한 몇 가지 특수한 기하학 데이터 유형을 제공합니다:
- POINT: 2차원 공간에서 단일 점을 나타냅니다.
- LINESTRING: 선 또는 곡선을 이루는 점의 시퀀스를 나타냅니다.
- POLYGON: 일련의 점으로 구성된 닫힌 도형을 나타냅니다.
- MULTIPOINT: 여러 개의 포인트 객체 모음을 나타냅니다.
- MULTILINESTRING: 여러 LINESTRING 객체의 컬렉션을 나타냅니다.
- MULTIPOLYGON: 여러 개의 다각형 객체 컬렉션을 나타냅니다.
- GEOMETRYCOLLECTION: 모든 유형의 여러 GEOMETRY 객체 컬렉션을 나타냅니다.
- POINT: 2차원 공간에서 단일 점을 나타냅니다.
지리 데이터 유형을 사용할 때 MySQL은 공간 데이터를 생성, 분석 및 조작하기 위해 ST_Distance(), ST_Within(), ST_Buffer() 등과 같은 공간 함수 집합을 제공합니다.
- JSON
JSON 데이터 유형은 사람이 쉽게 읽고 쓸 수 있고 기계가 쉽게 구문 분석하고 생성할 수 있는 경량 데이터 교환 형식인 JSON(JavaScript Object Notation) 데이터를 저장하는 데 사용됩니다. JSON 데이터는 객체, 배열, 중첩된 값과 같은 복잡한 데이터 구조를 나타낼 수 있습니다.
MySQL의 JSON 데이터 유형은 다음과 같은 이점을 제공합니다.
- 유효성 검사: MySQL은 JSON 데이터의 유효성을 자동으로 검사하여 데이터베이스에 저장하기 전에 유효한 JSON 형식인지 확인합니다.
- 스토리지 효율성: JSON 데이터는 바이너리 형식(바이너리 JSON 또는 BSON이라고 함)으로 저장되므로 원시 JSON 텍스트를 저장하는 것보다 더 압축적이고 효율적입니다.
- 쿼리 기능: MySQL은 JSON_EXTRACT(), JSON_REPLACE(), JSON_ARRAY(), JSON_OBJECT() 등 JSON 데이터를 쿼리, 조작, 생성할 수 있는 다양한 JSON 함수 세트를 제공합니다.
- 유효성 검사: MySQL은 JSON 데이터의 유효성을 자동으로 검사하여 데이터베이스에 저장하기 전에 유효한 JSON 형식인지 확인합니다.
MySQL에서 JSON 데이터 유형을 사용하면 유연하고 스키마가 필요 없는 방식으로 반정형 데이터를 효율적으로 저장하고 작업할 수 있어 동적 데이터나 다양한 속성을 가진 데이터를 다룰 때 특히 유용합니다.
'SQL' 카테고리의 다른 글
[SQL] SQL 피벗과 UNION/IN 연산자 (0) | 2023.05.09 |
---|---|
[SQL] MySQL 변수와 내장 함수 (2) | 2023.05.09 |
[MySQL] RANK 함수 (0) | 2023.04.24 |
[SQL] SQL MATH 함수 (0) | 2023.04.24 |
[SQL] SQL GROUP 함수 (0) | 2023.04.24 |