http://www.mysqlkorea.co.kr
한글매뉴얼 5.0 , 한글매뉴얼 5.1 , MySQL 5.1 HA , 사용자매뉴얼
한글매뉴얼 5.0  
한글매뉴얼 5.1  
MYSQL 5.1 HA  
사용자매뉴얼  
영문매뉴얼  
최신글
unauthenticated …
mysql enterprise…
mysql 프로시저 …
사원모집(당일지…
Table의 최종 갱…
 
한글매뉴얼 5.0 > 매뉴얼존 > 한글매뉴얼 5.0
 

11.2. 숫자 타입

 

MySQL은 표준 SQL의 모든 숫자 데이터 타입을 지원한다. 이러한 타입에는 정확한 숫자 데이터 타입 (INTEGER, SMALLINT, DECIMAL, 그리고 NUMERIC) 뿐만 아니라, 대략적인 숫자 데이터 타입 (FLOAT, REAL, 그리고 DOUBLE PRECISION)도 포함된다. 키워드 INTINTEGER의 동의어 이며, 키워드 DECDECIMAL과 동의어 이다. 숫자 타입 스토리지 요구 사항에 대해서는, Section 11.5, “데이터 타입 스토리지 요구 사항를 참조할 것.

 

MySQL 5.0.3 이후에는, BIT 데이터 타입을 사용해서 비트-필드 값을 저장할 수가 있게 되었다. (5.0.3 이전에서는, MySQLBITTINYINT(1) 형태로 해석했다.) MySQL 5.0.3의 경우, BITMyISAM에 대해서만 지원을 한다. MySQL 5.0.5에서는 BITMEMORY, InnoDB, 그리고 BDB를 지원하도록 확장되었다.

 

표준 SQL 의 확장 형태로서, MySQL 은 정수 타입도 함께 지원을 한다: TINYINT, MEDIUMINT, 그리고 BIGINT. 아래의 테이블은 각각의 정수 타입을 위한 요구 사항 및 범위를 나타내고 있다.

 

Type

Bytes

Minimum Value

Maximum Value

 

 

(Signed/Unsigned)

(Signed/Unsigned)

TINYINT

1

-128

127

 

 

0

255

SMALLINT

2

-32768

32767

 

 

0

65535

MEDIUMINT

3

-8388608

8388607

 

 

0

16777215

INT

4

-2147483648

2147483647

 

 

0

4294967295

BIGINT

8

-9223372036854775808

9223372036854775807

 

 

0

18446744073709551615

 
 

타입에 대한 베이스 키워드에 따라 나오는 괄호에 있는 정수의 출력 폭을 지정하기 위한 옵션을 MySQL은 추가로 지원한다 (예를 들면, INT(4)).

 

출력 폭은 컬럼에 저장될 수 있는 값의 범위를 한정하거나, 컬럼에 지정된 폭을 초과하는 값을 한정하지는 않는다.

 

옵션 확장 속성인 ZEROFILL을 사용해서 결합(conjunction)을 하게 되면, 스페이스에 대한 디폴트 패딩(padding) 0으로 대체된다. 예를 들면, INT(5) ZEROFILL으로 선언된 컬럼의 경우, 4 00004 형태로 나오게 된다. 만일 여러분이 정수 컬럼에 있는 출력 폭 보다 큰 값을 저장한다면, MySQL이 복잡한 조인(join)을 위해 임시 테이블을 생성할 때 문제가 발생할 수도 있는데, 그 이유는 이와 같은 상황에서는 MySQL은 데이터가 원래의 컬럼 폭에 적합할 것이라고 간주하기 때문이다.

 

모든 정수 타입은 옵션(비 표준) 속성인 UNSIGNED을 가진다. 여러분이 컬럼 안에는 음수가 아닌 값만을 허용하고자 하고 그러한 컬럼에 대해서는 보다 큰 상위 숫자 범위를 사용하고자 할 경우에 부호화 되지 않은 값(unsigned value)를 사용할 수 있다. 예를 들면, 만일 INT 컬럼이 UNSIGNED라면, 이 컬럼의 범위는 동일한 크기를 갖지만 -2147483648 2147483647 에서 0 4294967295로 변경된다.

부동 소수점 및 고정 소수점 타입 역시 UNSIGNED가 될 수 있다. 정수 타입과 함께 사용되기 때문에, 이 속성은 음수 값을 컬럼에 저장할 수 없도록 한다. 하지만, 정수 타입과는 달리, 컬럼의 상위 범위(upper range)는 동일한 범위를 갖는다.

 

만일 여러분이 숫자 컬럼에 대해서 ZEROFILL을 지정하면, MySQL은 자동으로 UNSIGNED 속성을 컬럼에 추가한다.

 

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

FLOAT DOUBLE 데이터 타입은 대략의 숫자 데이터 값을 표시하기 위해 사용된다. FLOAT 의 경우, 표준 SQL은 괄호 안에 있는 키워드 FLOAT 다음에 비트 단위로 정밀도를 표시할 수 있는 옵션을 허용한다. MySQL 역시 이러한 옵션 정밀도 표현을 허용하지만, 정밀도 값은 스토리지의 크기를 알아보기 위해서만 사용된다. 0 에서 23까지의 정밀도는 4 바이트 단일 정밀도 FLOAT 컬럼을 나타내며, 24에서 53까지는 8 바이트 이중 정밀도 DOUBLE 컬럼을 나타낸다.

 

MySQL은 비 표준적인 신텍스를 허용한다: FLOAT(M,D) 또는 REAL(M,D) 또는 DOUBLE PRECISION(M,D). 여기에서, “(M,D)이 의미하는 것은 전체적으로 최대 M 의 숫자 크기와 소수점 다음의 D 자릿수를 갖는 값이다. 예를 들면, FLOAT(7,4)로 정의된 컬럼은 -999.9999 으로 출력된다. MySQL은 값을 저장할 때 절사(rounding)을 실행하며, 따라서 만일 여러분이 999.00009 FLOAT(7,4) 컬럼에 삽입하는 경우에는, 그 결과는 대략 999.0001이 된다.

 

MySQLDOUBLEDOUBLE PRECISION (비 표준적인 확장임)의 동의어로 취급한다. MySQLREAL_AS_FLOAT SQL 모드가 활성화 되어 있지 않는 한, REALDOUBLE PRECISION (비 표준적인 확장임)의 동의어로 함께 취급한다.

 

이식성을 최대로 하기 위해서, 대략의 숫자 데이터 값에 대한 스토리지를 요구하는 코드는 어떠한 정밀도 또는 자릿수를 사용하지 않고 FLOAT 또는 DOUBLE PRECISION을 사용해야 한다.

 

DECIMAL NUMERIC 데이터 타입은 정확한 숫자 값을 저장하기 위해 사용된다. MySQL의 경우, NUMERICDECIMAL 형태로 구현된다. 이러한 타입들은 정확한 정밀도를 유지해야 하는 경우, 예를 들면 통화 데이터와 같은 것을 저장하는데 사용된다.

 

MySQL 5.0.3 이후에는, DECIMAL NUMERIC 값은 바이너리 포맷으로 저장된다. 이전 버전에서는, 이러한 값들은 스트링으로 저장되었으며, 각각의 자리 값은 하나의 단어, 소수점(크기가 0 보다 큰 경우), 그리고-부호를 사용하였다 (음수인 경우). Chapter 21, Precision Math를 참조.

 

DECIMAL 또는 NUMERIC 컬럼을 선언할 때에는, 정밀도 및 스케일 (scale)를 지정할 수 있다; 예를 들면:

salary DECIMAL(5,2)

 

위의 예문의 경우, 5 는 정밀도이며 2 는 스케일을 나타낸다. 정밀도(precision)는 의미를 갖는 자릿수를 나타내며, 스케일(scale)은 소수점 다음에 나오는 자릿수를 나타낸다. 만일 스케일이 0 이면, DECIMAL NUMERIC 값은 소수점 또는 분수 부분을 갖지 않는다.

 

표준 SQLsalary 컬럼이 모든 값을 저장할 때 5 자리와 소수 자리를 2개 사용하도록 한다. 따라서, 이와 같은 경우, 값의 범위는 salary 컬럼에 저장되는 값의 범위는 -999.99 에서 999.99까지가 된다. MySQLMySQL 5.0.3 에서 이 형태를 구현했다. 5.0.3 이전에는, 양수 범위의 끝에서, 컬럼은 실제로 9999.99까지의 숫자를 저장하였다.

 

표준 SQL의 경우, 신텍스 DECIMAL(M)DECIMAL(M,0)과 동일하다. 비슷하게, 신텍스 DECIMALDECIMAL(M,0)과 동일하다. MySQLDECIMAL NUMERIC 신텍스에 대한 위의 두 가지 형태 모두를 지원한다. M 의 디폴트는 10이다.

 

DECIMAL 또는 NUMERIC의 최대 가능 자릿수는 65 (MySQL 5.0.3 에서 5.0.5까지는 64). MySQL 5.0.3 이전의 경우, DECIMAL NUMERIC 값의 최대 범위는 DOUBLE과 동일하지만, 주어진 DECIMAL 또는 NUMERIC 컬럼에 대한 실제 범위는 주어진 컬럼의 정밀도 또는 스케일에 의해 제한을 받는다. 이러한 컬럼이 소수점 다음에 지정된 스케일 보다 큰 값을 할당 받는 경우에는, 그 값은 해당 스케일로 변환된다.

 

MySQL 5.0.3 이후에는, BIT 데이터 타입은 비트-필드(bit-field) 값을 저장하는데 사용된다. BIT(M) 타입은 allows for storage of M-비트 값에 대한 스토리지를 허용한다. M 1 에서 64까지 범위를 가질 수 있다.

비트 값을 지정하기 위해서는, b'value' 수식을 사용할 수 있다. value 0 1을 사용해서 작성된 바이너리 값이다. 예를 들면, b'111' b'100000000'7 128을 각각 나타낸다. Section 9.1.5, “Bit-Field Values”를 참조할 것.

 

만일 여러분이 M 비트 크기보다 작은 값을 BIT(M) 컬럼에 할당 한다면, 그 값의 왼쪽에는 0이 채워진다. 예를 들면, b'101'BIT(6) 컬럼에 할당하는 것은, b'000101'과 동일한 효과를 나타낸다.

 

데이터 타입의 허용 범위를 벗어나는 숫자 컬럼에 값을 저장하도록 할 경우에는, MySQL은 그 시점에 효력을 발생하는 SQL 모드에 따라서 행동을 한다. 예를 들면, 만일 어떠한 SQL 모드도 활성화 되지 않았다면,

MySQL은 그 값을 범위내의 적당한 끝자리에 갖다 놓는다. 하지만, 만일 모드가 TRADITIONAL로 설정되어 있다면, MySQL은 범위 밖의 값은 거부하고 에러를 발생시키며, SQL 표준에 따라서 실패를 삽입한다.

 

-스트릭트 모드(non-strict mode)의 경우, 범위 밖의 값이 정수 컬럼에 할당되면, MySQL은 컬럼 데이터 타입 범위의 끝 지점(end point) 값을 저장한다. 만일 여러분이 256TINYINT 또는 TINYINT UNSIGNED 컬럼에 저장한다면, MySQL127 또는 255를 각각 저장한다. 부동 소수점 또는 고정 소수점 컬럼이 지정된(또는 디폴트) 정밀도와 스케일의 범위를 초과하는 값을 할당 받는다면, MySQL은 범위의 끝 부분 지점 값을 저장한다.

상위
11.2. 숫자 타입
MySQL Korea 사이트의 컨텐츠 소유권은 (주)상상이비즈에 있으므로 무단전재를 금합니다.
ⓒ 2010-2011 ssebiz All Rights Reserved.