数値データ型の要約が次に紹介されます。数値型の特性の詳細は、項6.2. 「数値型」を参照してください。必要とする記憶容量は 項6.5. 「データ型のストレージ要件」 に紹介されています。
M
は整数型の最大表示幅を示しています。正当な最大表示幅は
255
です。項6.2. 「数値型」で説明されているように、表示幅はその型の許容値幅とは関係ありません。浮動小数点と固定小数点型に関しては、M
が格納可能な桁数の合計です。
数値カラムに対して
ZEROFILL
を指定すると、MySQL は自動的にそのカラムに
UNSIGNED
属性を追加します。
UNSIGNED
属性を使用できる数値データ型では
SIGNED
属性も使用できます。ただし、このデータ型はデフォルトで符号付きになっているため、SIGNED
属性を指定しても効果がありません。
SERIAL
は
BIGINT UNSIGNED NOT NULL AUTO_INCREMENT
UNIQUE
の別名です。
整数カラム定義の中の SERIAL
DEFAULT VALUE
は NOT NULL
AUTO_INCREMENT UNIQUE
の別名です。
一方が UNSIGNED
型のときに 2
つの整数値の間で減算を行うと、NO_UNSIGNED_SUBTRACTION
SQL
モードが有効でないかぎり、結果の値は符号なしになります。項7.9. 「キャスト関数と演算子」
を参照してください。
ビットフィールド型。M
は、各値のビット数 (1 から 64)
を表します。M
が省略された場合のデフォルトは 1 です。
TINYINT[(
M
)]
[UNSIGNED] [ZEROFILL]
非常に小さい整数。符号付きの範囲は
-128
から
127
です。符号なしの範囲は
0
から
255
です。
これらの型は
TINYINT(1)
の同義語です。ゼロの値は偽と見なされます。ゼロ以外の値は真と見なされます。
mysql>SELECT IF(0, 'true', 'false');
+------------------------+ | IF(0, 'true', 'false') | +------------------------+ | false | +------------------------+ mysql>SELECT IF(1, 'true', 'false');
+------------------------+ | IF(1, 'true', 'false') | +------------------------+ | true | +------------------------+ mysql>SELECT IF(2, 'true', 'false');
+------------------------+ | IF(2, 'true', 'false') | +------------------------+ | true | +------------------------+
しかしここに示されているように、TRUE
値と FALSE
はそれぞれが 1
と
0
の単なる別名です。
mysql>SELECT IF(0 = FALSE, 'true', 'false');
+--------------------------------+ | IF(0 = FALSE, 'true', 'false') | +--------------------------------+ | true | +--------------------------------+ mysql>SELECT IF(1 = TRUE, 'true', 'false');
+-------------------------------+ | IF(1 = TRUE, 'true', 'false') | +-------------------------------+ | true | +-------------------------------+ mysql>SELECT IF(2 = TRUE, 'true', 'false');
+-------------------------------+ | IF(2 = TRUE, 'true', 'false') | +-------------------------------+ | false | +-------------------------------+ mysql>SELECT IF(2 = FALSE, 'true', 'false');
+--------------------------------+ | IF(2 = FALSE, 'true', 'false') | +--------------------------------+ | false | +--------------------------------+
最後の 2
つのステートメントは、2
は、1
とも
0
とも等しくないので、表示される結果を表しています。
今後リリースされる MySQL の中で、標準 SQL に基づき、ブール型の扱いについて完全にカバーしていく予定です。
SMALLINT[(
M
)]
[UNSIGNED] [ZEROFILL]
小さい整数。符号付きの範囲は
-32768
から
32767
です。符号なしの範囲は
0
から
65535
です。
MEDIUMINT[(
M
)]
[UNSIGNED] [ZEROFILL]
中間サイズの整数。符号付きの範囲は
-8388608
から
8388607
です。符号なしの範囲は
0
から
16777215
です。
INT[(
M
)]
[UNSIGNED] [ZEROFILL]
普通サイズの整数。符号付きの範囲は
-2147483648
から
2147483647
です。符号なしの範囲は
0
から
4294967295
です。
INTEGER[(
M
)]
[UNSIGNED] [ZEROFILL]
この型は
INT
の同義語です。
BIGINT[(
M
)]
[UNSIGNED] [ZEROFILL]
大きい整数。符号付きの範囲は
-9223372036854775808
から
9223372036854775807
です。符号なしの範囲は
0
から
18446744073709551615
です。
SERIAL
は
BIGINT UNSIGNED NOT NULL
AUTO_INCREMENT UNIQUE
の別名です。
BIGINT
カラムに関して注意するべきこと
すべての演算は符号付きの
BIGINT
値または
DOUBLE
値を使って行われるため、ビット関数を使用しないかぎり、9223372036854775807
(63 ビット)
よりも大きい符号なしの整数を使用しないようにしてください。そのような整数を使用した場合は、BIGINT
値から
DOUBLE
値への変換時に、丸め誤差のために結果の最後の数桁に誤差が生じる可能性があります。
MySQL は、次のようなときに
BIGINT
を扱うことができます。
BIGINT
カラムに符号なしの大きい値を格納するのに整数を使用するとき。
col_name
が
BIGINT
カラムを参照する、MIN(
や
col_name
)MAX(
の中
col_name
)
両方のオペランドが整数の場合に、+
、-
、*
などの演算子を利用するとき。
文字列を利用することで、いつでも正確な整数を
BIGINT
カラムに格納できます。この場合 MySQL
は、中間倍精度表現を含まない、文字列から数値への変換を行います。
両方のオペランドが整数の場合、-
、+
、そして
*
演算子は、BIGINT
演算を利用します。これは、もし 2
つの大きい整数を掛け合わした場合、(または整数を返す関数からの結果)、その結果が
9223372036854775807
以上のときには、予期しない結果になるということを意味します。
FLOAT[(
M
,D
)]
[UNSIGNED] [ZEROFILL]
小さい (単精度) 浮動小数点数。許容値は
-3.402823466E+38
から
-1.175494351E-38
、0
、および
1.175494351E-38
から
3.402823466E+38
です。これらは、IEEE
スタンダードに基づいた理論的な限界です。利用するハードウェアや
OS
によっては、実際の範囲は少し小さくなるかも知れません。
M
は桁数の合計で、D
は小数点以下の桁数の合計です。もし
M
と
D
が削除された場合、値はハードウェアに許容された限界まで格納されます。単精度小数点数は大体小数第
7 位まで正確です。
UNSIGNED
が指定されている場合、負数は許可されません。
MySQL
ではすべての計算が倍精度で行われているので、FLOAT
を利用すると、予想外の問題が起きます。Solving Problems with No Matching Rows
を参照してください。
DOUBLE[(
M
,D
)]
[UNSIGNED] [ZEROFILL]
普通サイズ (倍精度)
の浮動小数点数。許容値は
-1.7976931348623157E+308
から
-2.2250738585072014E-308
、0
、および
2.2250738585072014E-308
から
1.7976931348623157E+308
です。これらは、IEEE
スタンダードに基づいた理論的な限界です。利用するハードウェアや
OS
によっては、実際の範囲は少し小さくなるかも知れません。
M
は桁数の合計で、D
は小数点以下の桁数の合計です。もし
M
と
D
が削除された場合、値はハードウェアに許容された限界まで格納されます。倍精度小数点数は大体小数第
15 位まで正確です。
UNSIGNED
が指定されている場合、負数は許可されません。
DOUBLE
PRECISION[(
,
M
,D
)]
[UNSIGNED] [ZEROFILL]REAL[(
M
,D
)]
[UNSIGNED] [ZEROFILL]
これらの型は
DOUBLE
の同義語です。例外
:REAL_AS_FLOAT
SQL
モードが有効のときは、DOUBLE
ではなく
REAL
が
FLOAT
の同義語になります。
FLOAT(
p
)
[UNSIGNED] [ZEROFILL]
浮動小数点数です。p
は精度をビットで表現しますが、MySQL
は結果として得られるデータ型に対して
FLOAT
または
DOUBLE
のどちらを使用するかを決めるためだけにこの値を使用します。p
が 0 から 24 のとき、そのデータ型は
M
や
D
値がない
FLOAT
になります。p
が 25 から
53 のとき、そのデータ型は
M
や
D
値がない
DOUBLE
になります。結果となるカラムの範囲は、この節の最初の方で説明されているように、単精度
FLOAT
か倍精度
DOUBLE
データ型のものと同じです。
DECIMAL[(
M
[,D
])]
[UNSIGNED] [ZEROFILL]
パックされた「正確な」固定小数点数。M
は桁数の合計 (精度)
で、D
は小数点以下の桁数 (スケール)
です。小数点と、負数に対する
「-
」
記号は M
の中ではカウントされません。D
が 0
のときは、小数点や端数部はありません。DECIMAL
の最大桁数 (M
) は 65
です。サポートされる小数部の最大桁数
(D
) は 30
です。D
が省略された場合のデフォルトは 0
です。M
が省略された場合のデフォルトは 10 です。
UNSIGNED
が指定されている場合、負数は許可されません。
DECIMAL
カラムを利用したすべての基本的な計算
(+, -, *, /
)
は、65 桁の精度で行われます。
DEC[(
,
M
[,D
])]
[UNSIGNED] [ZEROFILL]NUMERIC[(
,
M
[,D
])]
[UNSIGNED] [ZEROFILL]FIXED[(
M
[,D
])]
[UNSIGNED] [ZEROFILL]
これらの型は
DECIMAL
の同義語です。FIXED
同義語はほかのデータベースと互換性があります。