..

Search

13) 숫자 타입

숫자 타입


타입(data type)

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

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

 

1. 숫자 타입

2. 문자열 타입

3. 날짜와 시간 타입


숫자 타입(numeric types)

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

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

 

1. 정수 타입(integer types)

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

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

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


정수 타입(integer types)

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

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

 

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

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

 

MySQL 정수 타입에 따른 표현할 수 있는 최댓값, 최솟값과 요구되는 저장 공간의 크기는 다음과 같습니다.

타입 저장 공간 최댓값 최솟값
Signed Unsigned Signed Unsigned
TINYINT 1바이트 -128  0 127 255
SMALLINT 2바이트 -32768 0 32767 65535
MEDIUMINT 3바이트 -8388608  0 8388607 16777215
INT 4바이트 -2147483648 0 2147483647 4294967295
BIGINT 8바이트 -9223372036854775808  0 9223372036854775807 18446744073709551615

 

다음 예제는 ALTER TABLE 문을 사용하여 Reservation 테이블에 4바이트의 정수를 저장할 수 있는 Price 필드를 추가합니다.

이렇게 Price 필드를 추가한 후에 DESCRIBE 문을 사용하여 Reservation 테이블의 상세 정보를 확인하면, 다음 실행 결과와 같이 나타납니다.

예제

 

ALTER TABLE Reservation

ADD Price INT;

 

코딩연습 ▶ 

실행 결과

 

그리고서 INSERT INTO 문을 사용하여 Price 필드 값으로 1000을 가지는 새로운 레코드를 추가하고 있습니다.

마지막으로 SELECT 문을 사용하여 Reservation 테이블의 모든 레코드를 선택하여 확인합니다.


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

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

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

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

 

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

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

문법

DECIMAL(M,D)

 

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

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

 

다음 예제는 ALTER TABLE 문을 사용하여 Reservation 테이블의 RoomNum 필드 타입을 고정 소수점 타입으로 변경합니다.

이렇게 RoomNum 필드의 타입을 변경한 후에 DESCRIBE 문을 사용하여 Reservation 테이블의 상세 정보를 확인하면, 다음실행 결과와 같이 나타납니다.

예제

 

ALTER TABLE Reservation

MODIFY COLUMN RoomNum DECIMAL(7,2);

 

코딩연습 ▶ 

실행 결과

 

위의 예제에서 RoomNum 필드는 -99999.99부터 99999.99까지의 실수를 저장할 수 있도록 변경됩니다.

 

그리고서 INSERT INTO 문을 사용하여 RoomNum 필드 값으로 99999.99를 가지는 새로운 레코드를 추가합니다.

마지막으로 SELECT 문을 사용하여 Reservation 테이블의 모든 레코드를 선택하여 확인합니다.


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

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

MySQL은 IEEE 754 표준에 따라 FLOAT는 4바이트를 사용하며, DOUBLE은 8바이트를 사용합니다.

 

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

문법

FLOAT(P)

 

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

 

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

문법

FLOAT(M,D)

DOUBLE(M,D)

 

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

 

다음 예제는 ALTER TABLE 문을 사용하여 Reservation 테이블의 RoomNum 필드 타입을 부동 소수점 타입으로 변경합니다.

이렇게 RoomNum 필드의 타입을 변경한 후에 DESCRIBE 문을 사용하여 Reservation 테이블의 상세 정보를 확인하면, 다음 실행 결과와 같이 나타납니다.

예제

 

ALTER TABLE Reservation

MODIFY COLUMN RoomNum FLOAT(7,2);

 

코딩연습 ▶ 

실행 결과

 

위의 예제에서 RoomNum 필드는 이제 -99999.99부터 99999.99까지의 실수를 저장할 수 있도록 변경됩니다.

 

그리고서 INSERT INTO 문을 사용하여 RoomNum 필드 값으로 99999.99를 가지는 레코드를 추가합니다.

마지막으로 SELECT 문을 사용하여 Reservation 테이블의 모든 레코드를 선택하여 확인합니다.

 

이처럼 RoomNum 필드 값으로 99999.009를 입력하면, 실수의 총 자릿수가 명시한 7자리를 초과합니다.

따라서 이 값은 7자리로 맞춰지기 위해 반올림되어 99999.01로 자동 변환되어 저장됩니다.


비트값 타입(bit-value type)

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

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

문법

BIT(M)

 

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

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

 

다음 예제는 ALTER TABLE 문을 사용하여 Reservation 테이블에 BIT(7) 타입을 저장할 수 있는 Code 필드를 추가합니다.

이렇게 Code 필드를 추가한 후에 DESCRIBE 문을 사용하여 Reservation 테이블의 상세 정보를 확인하면, 다음 실행 결과와 같이 나타납니다.

예제

 

ALTER TABLE Reservation

ADD Code BIT(7);

 

코딩연습 ▶ 

실행 결과

 

그리고서 INSERT INTO 문을 사용하여 Code 필드의 값으로 각각 b'100'과 b'100001'을 가지는 새로운 레코드를 추가합니다.

이때 Code 필드의 값인 b'100'과 b'100001'은 각각 b'0000100'과 b'0100001'로 자동 변환되어 저장됩니다.

 

마지막으로 SELECT 문을 사용하여 Reservation 테이블에서 Code 필드의 값이 NULL이 아닌 모든 레코드를 선택한 후, 해당 레코드의 Code 필드 값을 확인합니다.

 

이진수 b'100'은 십진수 4를 나타내며, 이진수 b'100001'은 십진수 33을 나타냅니다.
MySQL에서는 이러한 바이너리 값을 출력하기 위해 BIN()와 같은 변환 함수를 제공하고 있습니다.

연습문제