整数データ型の場合、M
は最大表示幅を示します。 最大表示幅は 255 です。 表示幅は、セクション11.1.6「数値型の属性」 で説明されているように、型が格納できる値の範囲とは無関係です。
浮動小数点データ型および固定小数点データ型の場合、M
は格納できる合計桁数です。
MySQL 8.0.17 では、整数データ型の表示幅属性は非推奨になりました。将来のバージョンの MySQL ではサポートされなくなる予定です。
数値カラムに対して ZEROFILL
を指定すると、MySQL は自動的にそのカラムに UNSIGNED
属性を追加します。
MySQL 8.0.17 では、ZEROFILL
属性は数値データ型では非推奨です。将来のバージョンの MySQL ではサポートされなくなる予定です。 この属性の効果を生成する別の方法の使用を検討してください。 たとえば、アプリケーションでは、LPAD()
関数を使用して、必要な幅まで数値をゼロ埋めたり、書式設定された数値を CHAR
カラムに格納したりできます。
UNSIGNED
属性を許可している数値データ型は、SIGNED
も許可します。 ただし、このデータ型はデフォルトで符号付きになっているため、SIGNED
属性を指定しても効果はありません。
MySQL 8.0.17 では、FLOAT
、DOUBLE
および DECIMAL
(およびすべてのシノニム) タイプのカラムに対して UNSIGNED
属性は非推奨になりました。将来のバージョンの MySQL ではサポートされなくなる予定です。 このようなカラムには、かわりに単純な CHECK
制約の使用を検討してください。
SERIAL
は BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE
のエイリアスです。
整数カラム定義の中の SERIAL DEFAULT VALUE
は NOT NULL AUTO_INCREMENT UNIQUE
のエイリアスです。
一方が UNSIGNED
型のときに 2 つの整数値の間で減算を行うと、NO_UNSIGNED_SUBTRACTION
SQL モードが有効でないかぎり、結果の値は符号なしになります。 セクション12.11「キャスト関数と演算子」を参照してください。
-
ビット値型。
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 です。 (DECIMAL
リテラルのテキストの長さには制限もあります。セクション12.25.3「式の処理」 を参照してください。)UNSIGNED
が指定されている場合、負の値は許可されません。 MySQL 8.0.17 では、DECIMAL
型のカラム (およびシノニム) のUNSIGNED
属性は非推奨になりました。将来のバージョンの MySQL ではサポートされなくなる予定です。 このようなカラムには、かわりに単純なCHECK
制約の使用を検討してください。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 位まで正確です。FLOAT(
は、非標準の MySQL 拡張機能です。 MySQL 8.0.17 では、この構文は非推奨であり、将来のバージョンの MySQL ではサポートされなくなる予定です。M
,D
)UNSIGNED
が指定されている場合、負の値は許可されません。 MySQL 8.0.17 では、FLOAT
型のカラム (およびシノニム) のUNSIGNED
属性は非推奨になっており、将来のバージョンの MySQL ではサポートされなくなる予定です。 このようなカラムには、かわりに単純なCHECK
制約の使用を検討してください。MySQL ではすべての計算が倍精度で行われているので、
FLOAT
を使用すると、予想外の問題が起きることがあります。 セクションB.3.4.7「一致する行がない場合の問題の解決」を参照してください。 -
FLOAT(
p
) [UNSIGNED] [ZEROFILL]浮動小数点数です。
p
は精度をビットで表現しますが、MySQL は、結果として得られるデータ型に対してFLOAT
またはDOUBLE
のどちらを使用するかを決めるためだけにこの値を使用します。p
が 0 から 24 のとき、そのデータ型はM
値もD
値もないFLOAT
になります。p
が 25 から 53 のとき、そのデータ型はM
値もD
値もないDOUBLE
になります。 結果となるカラムの範囲は、このセクションで前述した単精度FLOAT
または倍精度DOUBLE
データ型の場合と同じです。UNSIGNED
が指定されている場合、負の値は許可されません。 MySQL 8.0.17 では、FLOAT
型のカラム (およびシノニム) のUNSIGNED
属性は非推奨になっており、将来のバージョンの MySQL ではサポートされなくなる予定です。 このようなカラムには、かわりに単純なCHECK
制約の使用を検討してください。 -
DOUBLE[(
M
,D
)] [UNSIGNED] [ZEROFILL]普通サイズ (倍精度) の浮動小数点数。 許可されている値は、
-1.7976931348623157E+308
から-2.2250738585072014E-308
、0
、および2.2250738585072014E-308
から1.7976931348623157E+308
です。 これらは、IEEE スタンダードに基づいた理論的な限度です。 使用しているハードウェアまたはオペレーティングシステムによっては、実際の範囲は少し小さくなる場合があります。M
は桁数の合計で、D
は小数点以下の桁数です。M
とD
を省略した場合、値はハードウェアで許可された限度まで格納されます。 倍精度小数点数はおおよそ小数第 15 位まで正確です。DOUBLE(
は、非標準の MySQL 拡張機能です。 MySQL 8.0.17 では、この構文は非推奨であり、将来のバージョンの MySQL ではサポートされなくなる予定です。M
,D
)UNSIGNED
が指定されている場合、負の値は許可されません。 MySQL 8.0.17 では、DOUBLE
型のカラム (およびシノニム) のUNSIGNED
属性は非推奨になっており、将来のバージョンの MySQL ではサポートされなくなる予定です。 このようなカラムには、かわりに単純なCHECK
制約の使用を検討してください。 -
DOUBLE PRECISION[(
,M
,D
)] [UNSIGNED] [ZEROFILL]REAL[(
M
,D
)] [UNSIGNED] [ZEROFILL]これらの型は
DOUBLE
のシノニムです。 例外:REAL_AS_FLOAT
SQL モードが有効な場合は、DOUBLE
ではなくREAL
がFLOAT
のシノニムになります。