본문 바로가기
MySQL

[MySQL] DECIMAL, FLOAT, DOUBLE, BIT 소수점 표현

by 개발LOG 2024. 2. 10.
고정 소수점 타입(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까지의 실수를 저장할 수 있도록 변경됩니다.

 

---------

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

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

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

 

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까지의 실수를 저장할 수 있도록 변경됩니다.

 

 

비트값 타입(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'로 자동 변환되어 저장됩니다.