MySQL では、SQL-92
のすべての数値データ型をサポートしています。これらのデータ型は、正確な数値データ型(NUMERIC
、DECIMAL
、INTEGER
、SMALLINT
)だけでなく、近似数値データ型(FLOAT
、REAL
、DOUBLE
PRECISION
)を含みます。キーワード
INT
は INTEGER
のシノニムで、キーワード DEC
は
DECIMAL
のシノニムです。
MySQL では、NUMERIC
型と
DECIMAL
型は、SQL-92
標準で使用可能なデータ型と同じデータ型として実装されます。これらのデータ型は、金額データに関する値など、正確な精度で保存することが重要となる値に対して使用されます。これらのいずれかの型のカラムを宣言する際には、次のように、精度とスケールを指定することができます(通常、これらが指定されます)。
salary DECIMAL(5,2)
この例で、5
(precision
)
は、値に対して格納される 10
進数の桁数を表わし、2
(scale
)
は、小数点に続いて格納される桁数を表わします。したがって、この場合、salary
カラムに格納できる値の範囲は、-99.99
〜 99.99
になります(MySQL
では、正数の符号を格納する必要がないため、このカラムには、実際には、999.99
までの数値を格納することができます)。
SQL-92 では、構文 DECIMAL(p)
は
DECIMAL(p,0)
と同じです。同様に、構文 DECIMAL
は DECIMAL(p,0)
と同じです。この場合、p
の値を決定する実装を行うことができます。MySQL
では、現在のところ、DECIMAL
および NUMERIC
データ型のこれらの異型をサポートしていません。通常、これらの型の主な利点は精度とスケールを明示的に制御できることによるため、これはそれほど問題にはなりません。
DECIMAL
値と NUMERIC
値は、値の小数部の精度を維持するため、バイナリの浮動小数点数としてではなく、文字列として格納されます。値の各桁、小数点(scale
> 0 の場合)、そして
‘-
’
符号(負数の場合)に対して、1
文字が使用されます。scale
が 0
の場合、DECIMAL
値と
NUMERIC
値には小数点も小数部も含まれません。
DECIMAL
値と NUMERIC
値の最大範囲は DOUBLE
値と同じですが、個々の DECIMAL
または NUMERIC
カラムの実際の範囲は、個々のカラムの
precision
または scale
によって制限されます。指定されている
scale
で許容される桁数を超える桁数を小数部に持つ値がカラムに割り当てられた場合、値は指定されている
scale
に合わせて丸められます。指定されている(またはデフォルトの)precision
と scale
によって暗黙的に指定された範囲を超える大きさの値が
DECIMAL
または NUMERIC
カラムに割り当てられた場合、その範囲の最大値が格納されます。
SQL-92 標準の拡張として、MySQL
では、前出の表に挙げているように、TINYINT
、MEDIUMINT
、および
BIGINT
型もサポートしています。もう 1
つの拡張として、MySQL には、INT(4)
のように、型の基本キーワードに続いて整数値の表示幅をかっこ内に指定できるオプションがあります。このオプションの表示幅の指定は、カラムに指定された幅より小さい幅を持つ値で表示の左側を埋める目的で使用されますが、そのカラムに格納できる値の範囲が制限されたり、そのカラムに指定された幅を超える幅を持つ値の桁数が制限されたりすることはありません。オプションの拡張属性
ZEROFILL
と組み合せて使用した場合、デフォルトのスペースに代わってゼロが埋め込まれます。
たとえば、INT(5) ZEROFILL
として宣言されたカラムの場合、値
4
は 00004
として取り出されます。注意:
整数カラムの表示幅より大きい値を格納すると、MySQL
で一部の複雑な結合のテンポラリテーブルを生成するときに問題が発生することがあります。この場合、データはあくまでも本来のカラム幅に合っているものとして扱われます。
すべての整数型には、オプション(非標準)属性
UNSIGNED
を設定することができます。符号なしの値は、正数値だけを入力できるようにしたいカラムで、やや大きい数値範囲を必要とする場合に使用することができます。
MySQL 4.0.2 以降では、浮動小数点型にも
UNSIGNED
を設定することができます。
この属性が指定されていると、整数型の場合と同じように、カラムに負数の値を格納できなくなりますが、整数型とは異なり、カラム値の上の範囲は変わりません。
FLOAT
型は近似数値データ型を表現する目的で使用されます。
SQL-92 標準では、キーワード FLOAT
に続くかっこ内にオプションの精度をビットで指定することができます(指数の範囲は指定できません)。このオプションの精度指定は
MySQL
実装でもサポートしています。精度を指定しないでカラムに対して
FLOAT
キーワードを使用した場合、MySQL では 4
バイトを使って値が格納されます。FLOAT
キーワードに続けてかっこ内に 2
つの数字を指定する可変の構文も使用できます。このオプションでは、最初の数字は値に必要なバイト単位の記憶容量を表わし、2
番目の数字は格納および表示する小数部の桁数を表わします(DECIMAL
および NUMERIC
と同様)。MySQL
では、カラムに対して指定されている小数部桁数を超える数の桁を格納しようとすると、格納時に値が丸められ、余分な桁が削除されます。
REAL
型と DOUBLE
PRECISION
型では精度の指定は行えません。SQL-92
標準の拡張として、MySQL
では、DOUBLE
型は DOUBLE
PRECISION
型のシノニムとして認識されます。SQL-92
標準では、REAL
型の精度は
DOUBLE PRECISION
型で使用されている精度より小さくなければならないのに対し、MySQL
では、これらの両方が 8
バイトの倍精度浮動小数点値として実装されます(非
``ANSI モード'' で実行した場合)。
最大限の移植性を確保するためには、近似数値データ値の格納を必要とするコードでは、FLOAT
または DOUBLE PRECISION
の使用時に精度と小数部の桁数をいずれも指定しないようにします。
数値型のカラムに、そのカラム型で許容されている範囲を超える値を格納しようとすると、MySQL では、値は許容範囲の最大値または最低値に丸められて格納されます。
たとえば、INT
カラムの範囲は
-2147483648
から
2147483647
です。この場合、INT
カラムに
-9999999999
という値を挿入しようとすると、値は範囲の最低値に丸められ、-2147483648
として格納されます。同様に、9999999999
という値を挿入しようとすると、値は
2147483647
として格納されます。
INT
カラムが UNSIGNED
として設定されている場合、このカラムの範囲のサイズは変わりませんが、最小値と最大値はそれぞれ
0
と 4294967295
になります。
したがって、-9999999999
および
9999999999
という値を格納しようとすると、このカラムにはそれぞれ
0
および 4294967296
という値が格納されます。
ALTER TABLE
、LOAD DATA
INFILE
、UPDATE
、および複数行の
INSERT
ステートメントでは、切り落としによる値の変換は
``警告'' として報告されます。
型 | バイト | 最小値 | 最大値 |
TINYINT |
1 | -128 | 127 |
SMALLINT |
2 | -32768 | 32767 |
MEDIUMINT |
3 | -8388608 | 8388607 |
INT |
4 | -2147483648 | 2147483647 |
BIGINT |
8 | -9223372036854775808 | 9223372036854775807 |
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.