MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  数値データ型の構文

11.1.1 数値データ型の構文

整数データ型の場合、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 では、FLOATDOUBLE および DECIMAL(およびすべてのシノニム) タイプのカラムに対して UNSIGNED 属性は非推奨になりました。将来のバージョンの MySQL ではサポートされなくなる予定です。 このようなカラムには、かわりに単純な CHECK 制約の使用を検討してください。

SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE のエイリアスです。

整数カラム定義の中の SERIAL DEFAULT VALUENOT NULL AUTO_INCREMENT UNIQUE のエイリアスです。

警告

一方が UNSIGNED 型のときに 2 つの整数値の間で減算を行うと、NO_UNSIGNED_SUBTRACTION SQL モードが有効でないかぎり、結果の値は符号なしになります。 セクション12.11「キャスト関数と演算子」を参照してください。

  • BIT[(M)]

    ビット値型。 M は、値あたりのビット数 (1 から 64) を表します。 M を省略した場合のデフォルトは 1 です。

  • TINYINT[(M)] [UNSIGNED] [ZEROFILL]

    非常に小さい整数。 符号付きの範囲は -128 から 127 です。 符号なしの範囲は 0 から 255 です。

  • BOOLBOOLEAN

    これらの型は 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 値はそれぞれ、10 の単なるエイリアスです。

    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 つのステートメントは、21 とも 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 です。

    SERIALBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE のエイリアスです。

    BIGINT カラムについて注意の必要な点は、次のとおりです。

    • すべての演算は符号付きの BIGINT 値または DOUBLE 値を使用して行われるため、ビット関数を使用しないかぎり、9223372036854775807 (63 ビット) よりも大きい符号なしの整数を使用しないでください。 そのようにした場合、BIGINT 値から DOUBLE 値への変換時に、丸め誤差のために結果の最後の数桁に誤差が生じる可能性があります。

      MySQL は、次の場合に、BIGINT を扱うことができます。

      • 符号なしの大きな値を BIGINT カラムに格納するために整数を使用するとき。

      • MIN(col_name) または MAX(col_name) 内。ここで col_nameBIGINT カラムを指します。

      • 演算子 (+-* など) を使用する場合。ここで両方のオペランドは整数です。

    • 文字列を使用して格納すると、いつでも正確な整数値を 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-380、および 1.175494351E-38 から 3.402823466E+38 です。 これらは、IEEE スタンダードに基づいた理論的な限度です。 使用しているハードウェアまたはオペレーティングシステムによっては、実際の範囲は少し小さくなる場合があります。

    M は桁数の合計で、D は小数点以下の桁数です。 MD を省略した場合、値はハードウェアで許可された限度まで格納されます。 単精度小数点数はおおよそ小数第 7 位まで正確です。

    FLOAT(M,D) は、非標準の MySQL 拡張機能です。 MySQL 8.0.17 では、この構文は非推奨であり、将来のバージョンの MySQL ではサポートされなくなる予定です。

    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 制約の使用を検討してください。

    FLOAT(p) 構文は ODBC との互換性を確保するために用意されています。

  • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

    普通サイズ (倍精度) の浮動小数点数。 許可されている値は、-1.7976931348623157E+308 から -2.2250738585072014E-3080、および 2.2250738585072014E-308 から 1.7976931348623157E+308 です。 これらは、IEEE スタンダードに基づいた理論的な限度です。 使用しているハードウェアまたはオペレーティングシステムによっては、実際の範囲は少し小さくなる場合があります。

    M は桁数の合計で、D は小数点以下の桁数です。 MD を省略した場合、値はハードウェアで許可された限度まで格納されます。 倍精度小数点数はおおよそ小数第 15 位まで正確です。

    DOUBLE(M,D) は、非標準の MySQL 拡張機能です。 MySQL 8.0.17 では、この構文は非推奨であり、将来のバージョンの MySQL ではサポートされなくなる予定です。

    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 ではなく REALFLOAT のシノニムになります。


関連キーワード:  UNSIGNED, カラム, 数値, ZEROFILL, 整数, 範囲, 符号, FLOAT, IF, 構文