본문 바로가기
MySQL

MySQL 타입

by godfeeling 2020. 7. 2.

타입(data type)

MySQL에서 테이블을 정의할 때는 필드별로 저장할 수 있는 타입까지 명시해야 합니다.

 

MySQL에서 제공하는 기본 타입은 다음과 같습니다.

 

 

 

1. 숫자 타입

 

2. 문자열 타입

 

3. 날짜와 시간 타입

 

숫자 타입(numeric types)

MySQLSQL 표준에서 지원하는 모든 숫자 타입을 제공합니다.

 

MySQL에서 제공하는 숫자 타입은 다음과 같습니다.

 

 

 

1. 정수 타입(integer types)

 

2. 고정 소수점 타입(fixed-point types)

 

3. 부동 소수점 타입(floating-point types)

 

4. 비트값 타입(bit-value type)

 

정수 타입(integer types)

MySQLSQL 표준 정수 타입인 INTEGER(또는 INT)SMALLINT를 제공합니다.

 

또한, 표준 정수 타입의 범위를 더욱 확장한 TINYINT, MEDIUMINT, BIGINT까지 제공하고 있습니다.

 

 

 

각 정수 타입에 따라 요구되는 저장 공간과 표현할 수 있는 최댓값과 최솟값까지 달라집니다.

 

또한, 정수 타입은 음수까지 표현할 수 있는 SIGNED 타입과 양수만을 표현할 수 있는 UNSIGNED 타입으로도 구분됩니다.

 

고정 소수점 타입(fixed-point types)

MySQL에서 고정 소수점 타입인 DECIMAL은 실수의 값을 정확하게 표현하기 위해 사용됩니다.

 

DECIMAL에서 사용하는 고정 소수점 방식은 실수를 표현할 때 소수부의 자릿수를 고정하여 표현합니다.

 

, 소수부의 자릿수를 미리 정해 놓고, 고정된 자릿수로만 소수 부분을 표현하는 방식입니다.

 

 

 

MySQL에서 DECIMAL 타입은 NUMERIC을 구현하여 만들어졌습니다.

 

따라서 대부분의 경우 DECIMAL 대신 NUMERIC을 사용해도 똑같이 동작합니다.

 

문법

DECIMAL(M,D)

 

 

 

M은 소수 부분을 포함한 실수의 총 자릿수를 나타내며, 최댓값은 65입니다.

 

D는 소수 부분의 자릿수를 나타내며, D0이면 소수 부분을 가지지 않습니다.

 

부동 소수점 타입(floating-point types)

MySQL에서 부동 소수점 타입인 FLOATDOUBLE은 실수의 값을 대략적으로 표현하기 위해 사용됩니다.

 

MySQLIEEE 754 표준에 따라 FLOAT4바이트를 사용하며, DOUBLE8바이트를 사용합니다.

 

 

 

SQL 표준에서 FLOAT는 정밀도에 필요한 최소한의 비트 수를 명시할 수 있습니다.

 

문법

FLOAT(P)

 

 

 

P0부터 24까지의 값을 가질 때는 FLOAT 값으로 취급되며, 25부터 53까지의 값을 가질 때는 DOUBLE 값으로 취급됩니다.

 

 

 

또한, MySQLFLOATDOUBLE을 고정 소수점 타입과 같이 사용할 수 있는 비표준 문법도 지원합니다.

 

문법

FLOAT(M,D)

 

DOUBLE(M,D)

 

 

 

M은 소수 부분을 포함한 실수의 총 자릿수를 나타내며, D는 소수 부분의 자릿수를 나타냅니다.

 

비트값 타입(bit-value type)

MySQL에서 비트값 타입인 BIT는 비트의 값을 저장합니다.

 

, 01로 구성되는 바이너리(binary) 값을 저장할 수 있습니다.

 

문법

BIT(M)

 

 

 

M의 범위는 1부터 64까지 설정할 수 있으며, 명시한 M 비트의 값을 저장할 수 있습니다.

 

만약 명시한 M 비트보다 짧은 길이의 비트 값을 입력하면, 입력한 값 앞에 0을 추가하여 자동으로 길이를 맞춥니다.

 

문자열 타입

MySQL은 다양한 형태의 문자열 타입을 제공합니다.

 

 

 

1. CHARVARCHAR

 

2. BINARYVARBINARY

 

3. BLOBTEXT

 

4. ENUM

 

5. SET

 

CHARVARCHAR

CHARVARCHAR는 둘다 문자열 데이터를 저장할 수 있는 타입입니다.

 

하지만 저장 방식과 추출 방식 그리고 최대 길이를 다루는 방식에서 차이점을 가집니다.

 

 

 

CHAR는 문자열을 길이가 한 번 설정되면 그대로 고정되는 고정 길이의 문자열로 다룹니다.

 

하지만 VARCHAR는 문자열을 길이가 고정되지 않는 가변 길이의 문자열로 다룹니다.

 

문법

CHAR(M)

 

VARCHAR(M)

 

 

 

M은 저장할 수 있는 문자열의 최대 길이를 나타냅니다.

 

이때 CHAR0부터 255까지 설정할 수 있으며, VARCHAR0부터 65,535까지 설정할 수 있습니다.

 

 

 

CHAR는 설정한 크기보다 작은 길이의 문자열이 입력되면, 나머지 공간을 공백으로 채워 길이를 M과 같게 만듭니다.

 

하지만 VARCHAR는 실제 입력된 문자열의 길이만큼만 저장하고 사용합니다.

 

BINARYVARBINARY

BINARYVARBINARY는 각각 CHARVARCHAR과 거의 비슷합니다.

 

다만 BINARYVARBINARY는 문자 집합이 아닌 바이너리(binary) 데이터를 저장할 때 사용된다는 점만이 다릅니다.

 

문법

BINARY(M)

 

VARBINARY(M)

 

BLOBTEXT

BLOBBinary Large Object를 의미하며, 다양한 크기의 바이너리 데이터를 저장할 수 있는 타입입니다.

 

저장할 수 있는 데이터의 최대 크기에 따라 TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB로 구분됩니다.

 

 

 

TEXTVARCHAR와 비슷하지만, VARCHAR와는 달리 기본값을 가질 수 없습니다.

 

또한, TEXTBLOB과도 비슷하지만, BLOB과는 달리 문자열의 대소문자를 구분합니다.

 

저장할 수 있는 데이터의 최대 크기에 따라 TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT로 구분됩니다.

 

ENUM

ENUM은 미리 정의한 집합 안의 요소 중 하나만을 저장할 수 있는 타입입니다.

 

ENUM을 사용하면 가독성을 높일 수 있으며, 특정 숫자에 문자열로 의미를 부여할 수 있습니다.

 

 

 

ENUM 목록 집합은 최대 65,535개의 ENUM 데이터를 포함할 수 있습니다.

 

이렇게 설정된 ENUM 데이터는 내부적으로 정수로 변환되어 인식됩니다.

 

문법

ENUM('데이터값1','데이터값2',...)

 

SET

SET은 미리 정의한 집합 안의 요소 중 여러 개를 동시에 저장할 수 있는 타입입니다.

 

SET 목록 집합은 최대 64개의 SET 데이터를 포함할 수 있습니다.

 

문법

SET('데이터값1', '데이터값2', ...)

 

날짜와 시간 타입

MySQL은 날짜와 시간에 관한 다양한 형태의 타입을 제공합니다.

 

 

 

1. DATE, DATETIME, TIMESTAMP

 

2. TIME

 

3. YEAR

 

DATE, DATETIME, TIMESTAMP

DATE는 날짜를 저장할 수 있는 타입입니다.

 

기본 형식은 'YYYY-MM-DD'이며, 이때 저장할 수 있는 날짜의 범위는 '1000-01-01'부터 '9999-12-31'까지입니다.

 

 

 

DATETIME는 날짜와 함께 시간까지 저장할 수 있는 타입입니다.

 

기본 형식은 'YYYY-MM-DD HH:MM:SS'이며, 이때 저장할 수 있는 범위는 '1000-01-01 00:00:00'부터 '9999-12-31 23:59:59'까지입니다.

 

 

 

TIMESTAMP는 날짜와 시간을 나타내는 타임스탬프를 저장할 수 있는 타입입니다.

 

TIMESTAMP 타입의 필드는 사용자가 별다른 입력을 주지 않으면, 데이터가 마지막으로 입력되거나 변경된 시간이 저장됩니다.

 

따라서 데이터의 최종 변경 시각을 저장하고 확인하는 데 유용하게 사용됩니다.

 

이때 저장할 수 있는 범위는 '1970-01-01 00:00:01' UTC부터 '2038-01-19 03:14:07' UTC까지입니다.

 

 

 

입력받은 데이터가 유효한 날짜와 시간이 아니면, 세 타입 모두 0을 저장합니다.

 

TIME

TIME은 시간을 저장할 수 있는 타입입니다.

 

기본 형식은 'HH:MM:SS''HHH:MM:SS'이며, 이때 저장할 수 있는 시간의 범위는 '-838:59:59'부터 '838:59:59'까지입니다.

 

 

 

범위를 초과한 시간은 '-838:59:59'이나 '838:59:59'로 자동 변환되어 저장됩니다.

 

또한, 유효하지 않은 시간은 '00:00:00'로 저장됩니다.

 

YEAR

YEAR는 연도를 저장할 수 있는 타입입니다.

 

YEAR(2)2자리의 연도를 저장할 수 있으며, YEAR(4)4자리의 연도를 저장할 수 있습니다.

 

 

 

YEAR는 연도를 나타내는 숫자와 문자열을 모두 저장할 수 있으나, 저장되는 결과가 다음과 같이 조금씩 다릅니다.

 

 

 

1. 4자리 숫자로 저장하면, 저장할 수 있는 범위는 1901년부터 2155년까지가 됩니다.

 

2. 4자리 문자열로 저장하면, 저장할 수 있는 범위는 1901년부터 2155년까지가 됩니다.

 

3. 1자리 또는 2자리 숫자로 저장하면, 1부터 69까지는 2001년부터 2069년까지가 되고, 70부터 99까지는 1970년부터 1999년까지가 됩니다.

 

4. 1자리 또는 2자리 문자열로 저장하면, '0'부터 '69'까지는 2000년부터 2069년까지가 되고, '70'부터 '99'까지는 1970년부터 1999년까지가 됩니다.

 

5. 숫자 0을 저장하면, 2000년이 아닌 0000년으로 저장되므로, 2000년은 반드시 문자열 '0' 또는 '00'으로 입력해야 합니다.

 

 

 

이때 유효하지 않은 연도는 '0000'으로 저장됩니다.

'MySQL' 카테고리의 다른 글

MySQL 연산  (0) 2020.07.02
MySQL 제약조건  (0) 2020.07.02
MySQL 연산자  (0) 2020.07.02
MySQL 문법  (0) 2020.07.02
MySQL 기초  (0) 2020.07.02

댓글