본문 바로가기
웹 프로그래밍/MySQL

[MySQL] 데이터 타입 1 - 숫자

by 끊임없는정진 2022. 10. 27.

※선행학습으로 https://www.youtube.com/watch?v=ZQDsWySjY6g&t=2s 해당 영상을 보고 오는 것을 추천한다. 왜 부동 소수점 타입의 정밀도가 떨어지는지, 부동 소수점 타입이 어떤 특징을 갖는지 쉽고 재미있게 설명한 영상이다.

 

 

▶숫자 타입 : MySQL에는 정수, 고정 소수점, 부동 소수점, 비트 값 타입이 있다. 모든 숫자 타입에는 UNSIGNED속성을 설정해줄 수도 있는데, UNSIGNED 특성은 양수만을 저장한다(사용하는 예를 들면, 결제금액)

 

 

1. 정수 타입(Integer Types)

 

MySQL은 SQL 표준 정수 타입 INTEGER(INT)와 SMALLINT를 제공한다.

그리고 표준 정수 타입의 범위를 더욱 세세하게 다를 수 있도록 요구 사항에 따라 크기가 다양한 종류의 INT 타입 TINYINT, MEDIUMINT, BIGINT를 제공하고 있다. 

 

타입 저장 바이트 최대 값 최소 값
SIGNED UNSIGNED SIGNED UNSIGNED
TINYINT 1 byte -128 0 127 255
SMALLINT 2 byte -32768 0 32767 65535
MEDIUMINT 3 byte -8388608 0 8388607 16777215
INT 4 byte -2147483648 0 2147483647 4294967295
BIGINT 5 byte -9223372036854775808 0 9223372036854775807 18446744073709551615

(※ 타입 지정 시, 타입에 따라 괄호()에 숫자의 출력 폭을 지정하기 위한 옵션을 설정할 수 있다. INT(4)와 같이)

 

 

2. 고정 소수점 타입(Fixed-Point Types - DECIMAL, NUMERIC)

 

DECIMAL(십진수) 및 NUMERIC 타입은 정확한 숫자 값을 저장하기 위해 사용된다. 이러한 타입들은 정확한 정밀도를 유지해야 하는 경우, 예를 들면 화페의 통화데이터와 같은 것을 저장하는데 사용된다. 

다만, DECIMAL을 지정할 때, 정밀도와 스케일을 지정할 수 있는데, 정밀도는 의미를 갖는 자릿수를 나타내며, 스케일은 소수점 다음에 나오는 자릿수를 나타낸다. 예를 들어, 스케일 값이 0이면, DECIMAL 과 NUMERIC 값은 소수점 또는 분수 부분을 갖지 않는다. ex) ALTER TABLE member ADD jj_decimal DECIMAL(5,2);

표준 SQL은 DECIMAL 필드가 모든 값을 저장할 때 숫자 5자리에 소수 2개를 사용하도록 한다. 즉, 값의 범위는 -999.99~999.99가 된다.

 

 

3. 부동 소수점 타입(Floating-Point Types - FLOAT, DOUBLE)

 

부동 소수점 타입의 경우, MySQL은 단일-정밀도(single-precision) 값에 대해서는 4 바이트를 사용하고 이중-정밀도(double-precision) 값에 대해서는 8 바이트를 사용한다.

부동 소수점 타입은 대략적인 숫자 데이터 값을 표시하기 위해 사용되며, FLOAT의 경우, 키워드 FLOAT 다음 괄호()에 비트 단위로 정밀도를 표시할 수 있는 옵션을 허용한다.

정밀도가 0에서 23까지의 정밀도 값을 가질 때는(ex. FLOAT(23)) 4 바이트 단일 정밀도를 가지는 FLOAT 필드, 24에서 53까지의 정밀도 값을 가질 때에는 8 바이트 이중 정밀도 DOUBLE 필드를 나타낸다.

 

MySQL은부동소수점 타입을 고정 소수점 타입과 같이 사용할 수 있는 비표준 문법도 지원한다. 예를 들면, FLOAT(7,2) 라는 값은 7의 정밀도를 지니는 동시에 2라는 소수점 자리수를 나타낼 수도 있다. 물론, 24부터 53의 정밀도를 설정하려면 DOUBLE(53,2) 이런식으로 설정하면 된다. (※ 만약 FLOAT(7,2)로 설정된 변수에 99999.009를 입력한다면 반올림되어 99999.01로 저장한다.)

 

 

4. 비트 값 타입(Bit-Value Type)

 

비트값을 저장하는 경우 사용되는 타입. 다시말해, 0과 1로 구성되는 binary 값을 저장한다고 할 수 있겠다.

비트값의 경우 1에서 64까지의 범위를 가질 수 있으며, 명시한 비트의 값을 저장할 수 있게 된다. 예를 들어, BIT(6)를 입력할 경우, b'101'을 할당하는 것은 b'000101'과 똑같은 효과를 나타낸다. 비트 값을 지정하기 위해서는 b'value'라는 값을 사용한다. 

ALTER TABLE member ADD jj_bit BIT(6);

UPDATE member SET jj_bit = b'101' WHERE jj_name = 'jungjin';

과 같은 명령어를 사용할 경우, member table에 BIT(6)을 jj_bit 필드에 할당하고 'jungjin'이라는 사람의 이름의 jj_bit 필드에 비트값 b'101'을 할당한다. 따라서 '000101'로 자리가 채워지게 된다.  

댓글