MySQL はすべての標準 SQL 数値データ型をサポートします。これらの型には、厳密な数値データ型 (INTEGER、SMALLINT、DECIMAL、および NUMERIC) と近似数値データ型 (FLOAT、REAL、および DOUBLE PRECISION) が含まれます。キーワード INT は INTEGER の同義語で、キーワード DEC は DECIMAL の同義語です。
BIT データ型はビットフィールド値を保存し、MyISAM、MEMORY、InnoDB、BDB テーブルをサポートします。
SQL 標準の拡張として、MySQL は整数型 TINYINT、MEDIUMINT、BIGINT もサポートします。次の表は、各整数型に必要なストレージと範囲を示しています。
タイプ | バイト | 最小 | 最大 |
(編) | (署名あり/署名なし) | ||
TINYINT | 1 | -128 | 127 |
0 | 255 | ||
SMALLINT | 2 | -32768 | 32767 |
0 | 65535 | ||
ミディアムミント | 3 | -8388608 | 8388607 |
0 | 16777215 | ||
INT | 4 | - 2147483648 | 2147483647 |
0 | 4294967295 | ||
BIGINT | 8 | -922 3372036854775808 | 9223372036854775807 |
0 | 18446744073709551615 |
MySQL は、type キーワードに続く括弧内の整数値の表示幅を指定するオプションもサポートしています (例: INT(4))。オプションの表示幅指定は、表示幅が指定された列幅より小さい場合に、左から幅を埋めるために使用されます。
表示幅は、列内に保存できる値の範囲を制限したり、列の指定された幅を超える値の表示を制限したりしません。
オプションの拡張属性 ZEROFILL と組み合わせて使用すると、デフォルトの補助スペースがゼロに置き換えられます。たとえば、INT(5) ZEROFILL として宣言された列の場合、値 4 は 00004 として取得されます。表示された幅を超える値を整数列に格納すると、MySQL は複雑な結合用の一時テーブルを生成するときに問題に遭遇することに注意してください。このような場合、MySQL はデータが元の列幅に収まると信じているからです。
すべての整数型は、オプションの (非標準) 属性 UNSIGNED を持つことができます。符号なしの値は、列に負でない数値のみを許可し、その列でより大きな上限の数値範囲が必要な場合に使用できます。
浮動小数点型と固定小数点型も UNSIGNED にすることができます。同じ数値タイプの場合、このプロパティにより、負の値が列に保存されなくなります。ただし、整数型とは異なり、列値の上限は変わりません。
数値カラムに ZEROFILL を指定すると、MySQL は自動的に UNSIGNED 属性をカラムに追加します。
MySQL では、浮動小数点カラム型の場合、単精度値は 4 バイト、倍精度値は 8 バイトを使用します。
FLOAT 型は、近似的な数値データ型を表すために使用されます。 SQL 標準では、オプションで、FLOAT キーワードに続く括弧内で精度をビット単位で指定できます (ただし、指数範囲は指定できません)。 MySQL は、ストレージ サイズを決定するためにのみ使用されるオプションの精度仕様もサポートしています。 0 ~ 23 の精度は、FLOAT 列の 4 バイトの単精度に対応します。 24 ~ 53 の精度は、DOUBLE 列の 8 バイトの倍精度に対応します。
MySQL では、FLOAT(M,D)、REAL(M,D)、または DOUBLE PRECISION(M,D) などの非標準構文の使用が許可されています。ここで、「(M,D)」は、値が小数点の後にD桁が位置する合計M桁を整数として表示することを意味します。たとえば、FLOAT(7,4) として定義された列は、-999.9999 と表示される可能性があります。 MySQL は保存時に値を四捨五入するため、FLOAT(7,4) カラムに 999.00009 を挿入すると、おおよその結果は 999.0001 になります。
MySQL は、DOUBLE を DOUBLE PRECISION (非標準拡張) の同義語として扱います。また、MySQL は、SQL サーバー モードに REAL_AS_FLOAT オプションが含まれていない限り、REAL を DOUBLE PRECISION (非標準拡張) の同義語として扱います。
最大限の移植性を確保するには、近似数値データ値の格納を必要とするコードは、精度や桁数を指定せずに FLOAT または DOUBLE PRECISION を使用する必要があります。
DECIMAL 型と NUMERIC 型は、MySQL では同じ型として扱われます。これらは、通貨データなど、正確な精度が必要な値を保持するために使用されます。このタイプの列を宣言する場合、次のように精度とスケールを指定できます (そして通常はそうします)。 この例では、精度は 5 で、スケールは 2 です。精度は値を保存できる桁数を示し、スケールは小数点以下の桁数を保存できます。
MySQL 5.1 で DECIMAL 値と NUMERIC 値をバイナリ形式で保存します。
標準 SQL では、給与列に 5 桁の整数と小数点以下 2 桁の任意の値を格納できる必要があります。したがって、この場合、給与列に保存できる値の範囲は、-999.99 ~ 999.99 となります。
標準 SQL では、構文 DECIMAL(
M) は DECIMAL(M,0) と同等です。同様に、構文 DECIMAL は DECIMAL(M,0) と等価で、M の値は計算によって決定できます。 DECIMAL および NUMERIC データ型の変数形式は、MySQL 5.1 でサポートされています。 Mデフォルト値は 10 です。 DECIMAL または NUMERIC の最大桁数は 65 ですが、特定の DECIMAL または NUMERIC 列の実際の範囲は、特定の列の精度または位取りによって制限されます。このような列に、指定されたスケールで許可されているよりも多くの小数点以下の桁数を含む値が割り当てられている場合、値はそのスケールに変換されます。 (具体的な操作はオペレーティング システムによって異なりますが、通常、結果は許容される桁数に切り捨てられます)。
BIT データ型は、ビットフィールド値を保存するために使用できます。 BIT(
M) タイプを使用すると、M ビット値を保存できます。 Mの範囲は1から64です。 ビット値を指定するには、b'
value' シンボルを使用できます。 valueは、0と1で書かれたバイナリ値です。たとえば、b'111' と b'100000000' は、それぞれ 7 と 128 を表します。 BIT(M) 列に割り当てられた値の長さが
Mビット未満の場合、値の左側を 0 で埋めます。たとえば、値 b'101' を BIT(6) 列に割り当てると、b'000101' を割り当てるのと同じ効果が得られます。 数値カラムにそのカラムの許容範囲を超える値を保存したい場合、MySQL の動作はその時点で有効な SQL モードに依存します。モードが設定されていない場合、MySQL は値を範囲の対応するエンドポイントにクリップし、クリップされた値を保存します。ただし、モードが従来型 (「厳密モード」) に設定されている場合、範囲外の値はエラーで拒否され、SQL 標準に従って挿入は失敗します。
INT 列が UNSIGNED の場合、列範囲のサイズは同じですが、そのエンドポイントは 0 と 4294967295 に変更されます。 -9999999999 と 9999999999 を保存しようとすると、非厳密モードで列に保存される値は 0 と 4294967296 になります。
浮動小数点または固定小数点のカラムに割り当てられた値が、指定された (またはデフォルトの) 精度とスケールで指定された範囲を超える場合、MySQL は範囲の対応するエンドポイントを表す値を非厳密モードで保存します。
MySQL が厳密モードで動作していない場合、クリッピングによる変換は、ALTER TABLE、LOAD DATA INFILE、UPDATE、および複数行の INSERT ステートメントの警告として報告されます。 MySQL が厳密モードで動作している場合、これらのステートメントは失敗し、テーブルがトランザクションであるかどうかやその他の要因に応じて、一部またはすべての値が挿入または変更されません。
上記は、MySQL 基本チュートリアル 1 - データ型の数値型の内容です。さらに関連する内容については、PHP 中国語 Web サイト (m.sbmmt.com) に注目してください。