Loading...
MySQL 9.5 Reference Manual 9.5의 13.1.1 Numeric Data Type Syntax의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
정수 데이터 타입의 경우 M 은 최소 표시 너비를 나타냅니다. 최대 표시 너비는 255입니다. 표시 너비는 Section 13.1.6, “Numeric Type Attributes”에 설명된 것처럼, 타입이 저장할 수 있는 값의 범위와는 관련이 없습니다.
부동 소수점 및 고정 소수점 데이터 타입의 경우, M 은 저장할 수 있는 숫자 자리수의 전체 개수를 나타냅니다.
표시 너비 속성은 정수 데이터 타입에서 더 이상 사용되지 않습니다(deprecated). 향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다.
숫자 컬럼에 ZEROFILL을 지정하면, MySQL은 자동으로 해당 컬럼에 UNSIGNED 속성을 추가합니다.
ZEROFILL 속성은 숫자 데이터 타입에서 더 이상 사용되지 않습니다(deprecated). 향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다. 이 속성의 효과를 내기 위한 다른 방법을 사용하는 것이 좋습니다. 예를 들어, 애플리케이션은 LPAD() 함수를 사용하여 원하는 너비까지 숫자를 0으로 채우거나, 포맷된 숫자를 CHAR 컬럼에 저장할 수 있습니다.
UNSIGNED 속성을 허용하는 숫자 데이터 타입은 SIGNED도 허용합니다. 그러나 이러한 데이터 타입은 기본적으로 signed이므로, SIGNED 속성은 아무런 효과가 없습니다.
UNSIGNED 속성은 FLOAT,
DOUBLE,
DECIMAL (및 모든 동의어) 타입의 컬럼에서 더 이상 사용되지 않습니다(deprecated). 향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다. 이러한 컬럼에 대해서는 대신 간단한 CHECK 제약조건을 사용하는 것을 고려하십시오.
SERIAL은 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE의 별칭입니다.
정수 컬럼 정의에서 SERIAL DEFAULT VALUE는 NOT NULL AUTO_INCREMENT UNIQUE의 별칭입니다.
주의
한 값의 타입이 UNSIGNED인 정수 값들끼리 뺄셈을 사용할 때, NO_UNSIGNED_SUBTRACTION SQL 모드가 활성화되어 있지 않으면 결과는 unsigned가 됩니다. Section 14.10, “Cast Functions and Operators”를 참조하십시오.
bit 값 타입입니다. M 은 값당 bit 수를 나타내며, 1에서 64까지입니다. M 이 생략되면 기본값은 1입니다.
매우 작은 정수입니다. signed 범위는
-128에서 127까지입니다.
unsigned 범위는 0에서
255까지입니다.
이 타입들은 TINYINT(1)의 동의어입니다. 값이 0이면 false로 간주됩니다. 0이 아닌 값은 true로 간주됩니다:
1mysql> SELECT IF(0, 'true', 'false'); 2+------------------------+ 3| IF(0, 'true', 'false') | 4+------------------------+ 5| false | 6+------------------------+ 7 8mysql> SELECT IF(1, 'true', 'false'); 9+------------------------+ 10| IF(1, 'true', 'false') | 11+------------------------+ 12| true | 13+------------------------+ 14 15mysql> SELECT IF(2, 'true', 'false'); 16+------------------------+ 17| IF(2, 'true', 'false') | 18+------------------------+ 19| true | 20+------------------------+
그러나 TRUE 및
FALSE 값은 각각
1 및 0의 별칭에 불과하며, 다음과 같이 보여집니다:
1mysql> SELECT IF(0 = FALSE, 'true', 'false'); 2+--------------------------------+ 3| IF(0 = FALSE, 'true', 'false') | 4+--------------------------------+ 5| true | 6+--------------------------------+ 7 8mysql> SELECT IF(1 = TRUE, 'true', 'false'); 9+-------------------------------+ 10| IF(1 = TRUE, 'true', 'false') | 11+-------------------------------+ 12| true | 13+-------------------------------+ 14 15mysql> SELECT IF(2 = TRUE, 'true', 'false'); 16+-------------------------------+ 17| IF(2 = TRUE, 'true', 'false') | 18+-------------------------------+ 19| false | 20+-------------------------------+ 21 22mysql> SELECT IF(2 = FALSE, 'true', 'false'); 23+--------------------------------+ 24| IF(2 = FALSE, 'true', 'false') | 25+--------------------------------+ 26| false | 27+--------------------------------+
마지막 두 문장은 2가
1도 0도 아니기 때문에 위와 같은 결과를 표시합니다.
작은 정수입니다. signed 범위는
-32768에서 32767까지입니다.
unsigned 범위는 0에서
65535까지입니다.
중간 크기의 정수입니다. signed 범위는
-8388608에서 8388607까지입니다.
unsigned 범위는 0에서
16777215까지입니다.
일반 크기의 정수입니다. signed 범위는
-2147483648에서
2147483647까지입니다. unsigned 범위는
0에서 4294967295까지입니다.
이 타입은 INT의 동의어입니다.
큰 정수입니다. signed 범위는
-9223372036854775808에서
9223372036854775807까지입니다. unsigned 범위는
0에서
18446744073709551615까지입니다.
SERIAL은 BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE의 별칭입니다.
BIGINT 컬럼과 관련하여 알아 두어야 할 사항은 다음과 같습니다:
모든 연산은 signed
BIGINT 또는
DOUBLE 값을 사용하여 수행되므로,
bit 함수가 아닌 경우에는
9223372036854775807 (63 bit)보다 큰 unsigned big integer를 사용하지 않아야 합니다! 그렇게 하면,
BIGINT 값을
DOUBLE 값으로 변환할 때 반올림 오류 때문에 결과의 마지막 몇 자리 숫자가 잘못될 수 있습니다.
MySQL은 다음과 같은 경우에 BIGINT를 처리할 수 있습니다:
BIGINT 컬럼에 큰 unsigned 값을 저장하기 위해 정수를 사용할 때.
MIN(col_name) 또는
MAX(col_name)을 사용할 때,
여기서 col_name 은 BIGINT 컬럼을 참조합니다.
문자열을 사용하여 저장하면, BIGINT 컬럼에 항상 정확한 정수 값을 저장할 수 있습니다. 이 경우, MySQL은 중간 배정도 표현을 포함하지 않는 문자열-숫자 변환을 수행합니다.
-,
+,
* 연산자는 두 피연산자가 정수 값일 때
BIGINT 연산을 사용합니다. 이는 두 개의 big integer (또는 정수를 반환하는 함수의 결과)를 곱하면,
결과가 9223372036854775807보다 클 때 예상치 못한 결과가 나올 수 있음을 의미합니다.
packed “exact” 고정 소수점 숫자입니다.
M 은 숫자의 전체 자리수(정밀도)이고,
D 는 소수점 이하 자리수(스케일)입니다. 소수점과 (음수의 경우) - 기호는
M 에 포함되지 않습니다.
D 가 0이면, 값은 소수점이나 소수 부분을 가지지 않습니다.
DECIMAL의 최대 자리수( M)는 65입니다.
지원되는 최대 소수 자리수( D)는 30입니다.
D 가 생략되면 기본값은 0입니다.
M 이 생략되면 기본값은 10입니다.
(DECIMAL 리터럴의 텍스트 길이에 대한 제한도 있습니다. Section 14.25.3, “Expression Handling”을 참조하십시오.)
UNSIGNED가 지정되면 음수 값은 허용되지 않습니다. UNSIGNED 속성은
DECIMAL (및 모든 동의어) 타입의 컬럼에서 더 이상 사용되지 않습니다(deprecated).
향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다. 이러한 컬럼에 대해서는 대신 간단한 CHECK 제약조건을 사용하는 것을 고려하십시오.
DECIMAL 컬럼에 대한 모든 기본 연산 (+, -, *, /)은 65자리 정밀도로 수행됩니다.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL],
NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL],
FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]이 타입들은 DECIMAL의 동의어입니다.
FIXED 동의어는 다른 데이터베이스 시스템과의 호환성을 위해 제공됩니다.
작은(단정도, single-precision) 부동 소수점 숫자입니다.
허용되는 값은 -3.402823466E+38
에서 -1.175494351E-38,
0, 그리고 1.175494351E-38
에서 3.402823466E+38까지입니다. 이는 IEEE 표준을 기반으로 한 이론적인 한계입니다. 실제 범위는 하드웨어나 운영체제에 따라 약간 더 작을 수 있습니다.
M 은 숫자의 전체 자리수이고,
D 는 소수점 이하 자리수입니다.
M 및 D 가 생략되면, 값은 하드웨어에서 허용하는 한도까지 저장됩니다. 단정도 부동 소수점 숫자는 약 7자리 십진수까지 정확합니다.
FLOAT(M,D)는 표준이 아닌 MySQL 확장입니다. 이 구문은 더 이상 사용되지 않으며(deprecated), 향후 버전의 MySQL에서 이 구문에 대한 지원이 제거될 것으로 예상해야 합니다.
UNSIGNED가 지정되면 음수 값은 허용되지 않습니다. UNSIGNED 속성은
FLOAT (및 모든 동의어) 타입의 컬럼에서 더 이상 사용되지 않으며(deprecated),
향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다. 이러한 컬럼에 대해서는 대신 간단한 CHECK 제약조건을 사용하는 것을 고려하십시오.
FLOAT를 사용하면 MySQL의 모든 연산은 배정도 정밀도로 수행되기 때문에 예상치 못한 문제가 발생할 수 있습니다. Section B.3.4.7, “Solving Problems with No Matching Rows”를 참조하십시오.
부동 소수점 숫자입니다. p 는 bit 단위 정밀도를 나타내지만, MySQL은 이 값을 결과 데이터 타입으로
FLOAT 또는
DOUBLE 중 어느 것을 사용할지를 결정하는 데만 사용합니다.
p 가 0에서 24 사이인 경우, 데이터 타입은
M 또는 D 값이 없는 FLOAT가 됩니다.
p 가 25에서 53 사이인 경우, 데이터 타입은
M 또는 D 값이 없는 DOUBLE가 됩니다. 결과 컬럼의 범위는 앞에서 설명한 단정도 FLOAT 또는 배정도 DOUBLE 데이터 타입과 동일합니다.
UNSIGNED가 지정되면 음수 값은 허용되지 않습니다. UNSIGNED 속성은
FLOAT (및 모든 동의어) 타입의 컬럼에서 더 이상 사용되지 않으며(deprecated),
향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다. 이러한 컬럼에 대해서는 대신 간단한 CHECK 제약조건을 사용하는 것을 고려하십시오.
FLOAT(p) 구문은 ODBC 호환성을 위해 제공됩니다.
일반 크기(배정도, double-precision) 부동 소수점 숫자입니다.
허용되는 값은
-1.7976931348623157E+308에서
-2.2250738585072014E-308,
0, 그리고
2.2250738585072014E-308에서
1.7976931348623157E+308까지입니다. 이는 IEEE 표준을 기반으로 한 이론적인 한계입니다. 실제 범위는 하드웨어나 운영체제에 따라 약간 더 작을 수 있습니다.
M 은 숫자의 전체 자리수이고,
D 는 소수점 이하 자리수입니다.
M 및 D 가 생략되면, 값은 하드웨어에서 허용하는 한도까지 저장됩니다. 배정도 부동 소수점 숫자는 약 15자리 십진수까지 정확합니다.
DOUBLE(M,D)는 표준이 아닌 MySQL 확장이며 더 이상 사용되지 않습니다(deprecated). 향후 버전의 MySQL에서 이 구문에 대한 지원이 제거될 것으로 예상해야 합니다.
UNSIGNED가 지정되면 음수 값은 허용되지 않습니다. UNSIGNED 속성은
DOUBLE (및 모든 동의어) 타입의 컬럼에서 더 이상 사용되지 않으며(deprecated),
향후 버전의 MySQL에서 이에 대한 지원이 제거될 것으로 예상해야 합니다. 이러한 컬럼에 대해서는 대신 간단한 CHECK 제약조건을 사용하는 것을 고려하십시오.
이 타입들은 DOUBLE의 동의어입니다. 예외: REAL_AS_FLOAT SQL 모드가 활성화된 경우,
REAL은
DOUBLE가 아니라
FLOAT의 동의어입니다.
13.1 Numeric Data Types
13.1.2 Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT