数値データ型のサマリーについて説明します。数値型のプロパティーおよびストレージ要件の追加情報については、セクション11.2「数値型」およびセクション11.7「データ型のストレージ要件」を参照してください。
M
は整数型の最大表示幅を示します。最大表示幅は 255 です。セクション11.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 モードが有効でないかぎり、結果の値は符号なしになります。セクション12.10「キャスト関数と演算子」を参照してください。
-
ビットフィールド型。
M
は、値あたりのビット数 (1 から 64) を表します。M
を省略した場合のデフォルトは 1 です。 -
TINYINT[(
M
)] [UNSIGNED] [ZEROFILL]非常に小さい整数。符号付きの範囲は
-128
から127
です。符号なしの範囲は0
から255
です。 -
これらの型は
TINYINT(1)
のシノニムです。ゼロの値は false と見なされます。ゼロ以外の値は true と見なされます。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
とも等しくないために示される結果を表示します。 -
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
カラムに格納するために整数を使用するとき。MIN(
またはcol_name
)MAX(
内。ここでcol_name
)col_name
はBIGINT
カラムを指します。演算子 (
+
、-
、*
など) を使用する場合。ここで両方のオペランドは整数です。
文字列を使用して格納すると、いつでも正確な整数値を
BIGINT
カラムに格納できます。この場合、MySQL は、中間倍精度表現を含まない文字列から数値に変換します。両方のオペランドが整数値の場合、
-
、+
、および*
の演算子は、BIGINT
演算を使用します。これは、2 つの大きい整数 (または整数を返す関数からの結果) を掛け合わした場合、その結果が9223372036854775807
より大きいときには、予期しない結果になるということを意味します。
-
-
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
シノニムは、ほかのデータベースシステムとの互換性のために使用できます。 -
FLOAT[(
M
,D
)] [UNSIGNED] [ZEROFILL]小さい (単精度) 浮動小数点数。許可される値は、
-3.402823466E+38
から-1.175494351E-38
、0
、および1.175494351E-38
から3.402823466E+38
です。これらは、IEEE スタンダードに基づいた理論的な限度です。使用しているハードウェアまたはオペレーティングシステムによっては、実際の範囲は少し小さくなる場合があります。M
は桁数の合計で、D
は小数点以下の桁数です。M
とD
を省略した場合、値はハードウェアで許可された限度まで格納されます。単精度小数点数はおおよそ小数第 7 位まで正確です。UNSIGNED
が指定されている場合、負の値は許可されません。MySQL ではすべての計算が倍精度で行われているので、
FLOAT
を使用すると、予想外の問題が起きることがあります。セクションB.5.5.7「一致する行がない場合の問題の解決」を参照してください。 -
DOUBLE[(
M
,D
)] [UNSIGNED] [ZEROFILL]普通サイズ (倍精度) の浮動小数点数。許可されている値は、
-1.7976931348623157E+308
から-2.2250738585072014E-308
、0
、および2.2250738585072014E-308
から1.7976931348623157E+308
です。これらは、IEEE スタンダードに基づいた理論的な限度です。使用しているハードウェアまたはオペレーティングシステムによっては、実際の範囲は少し小さくなる場合があります。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
データ型の場合と同じです。