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


11.1.6 数値型の属性

MySQL では、整数データ型の基本キーワードに続く括弧内で、その型の表示幅をオプションで指定する拡張をサポートしています。 たとえば、INT(4) は、4 桁の表示幅の INT を指定しています。 このオプションの表示幅は、左側をスペースでパディングすることによって、カラムに対して指定された幅よりも狭く整数値を表示するために、アプリケーションで使用される場合があります。 (つまり、この幅は結果セットで返されるメタデータの中にあります。 使用されるかどうかはアプリケーションによって決まります。)

表示幅は、カラムに格納できない値の範囲を制約しません。 カラムの表示幅より広い値が正しく表示されなくなることもありません。 たとえば、SMALLINT(3) として指定されたカラムには、-32768 から 32767 の通常の SMALLINT 範囲があり、3 桁が許可されたこの範囲外の値は、4 桁以上を使用してすべて表示されます。

オプションの (非標準の) ZEROFILL 属性とともに使用すると、空白のデフォルトの埋込みがゼロに置き換えられます。 たとえば、INT(4) ZEROFILL として宣言されたカラムの場合、5 の値は 0005 として取得されます。

注記

式または UNION クエリーに含まれるカラムでは、ZEROFILL 属性は無視されます。

ZEROFILL 属性を持つ整数カラムに表示幅より大きな値を格納した場合、MySQL が一部の複雑な結合に対して一時テーブルを生成するときに問題が発生することがあります。 これらの場合、MySQL は、カラムの表示幅内でデータ値が適合すると想定します。

MySQL 8.0.17 では、整数データ型の表示幅属性と同様に、数値データ型の ZEROFILL 属性は非推奨になりました。 ZEROFILL のサポートおよび整数データ型の表示幅は、将来のバージョンの MySQL で削除される予定です。 これらの属性の効果を生成する別の方法の使用を検討してください。 たとえば、アプリケーションでは、LPAD() 関数を使用して、必要な幅まで数値をゼロ埋めしたり、書式設定された数値を CHAR カラムに格納したりできます。

すべての整数型は、オプション (非標準) の UNSIGNED 属性を持つことができます。 符号なし型を使用すると、カラムに負でない数値のみを許可したり、カラムの上限の数値範囲を大きくする必要がある場合に使用できます。 たとえば、INT カラムが UNSIGNED の場合、カラム範囲のサイズは同じですが、そのエンドポイントは -2147483648 および 2147483647 から 0 および 4294967295 にシフトします。

浮動小数点と固定小数点も UNSIGNED になり得ます。 整数型と同じように、この属性は負の値がカラムに格納されるのを防ぎます。 整数型とは異なり、カラム値の上限範囲は変わりません。 MySQL 8.0.17 では、FLOATDOUBLE および DECIMAL(およびすべてのシノニム) タイプのカラムに対して UNSIGNED 属性は非推奨であり、将来のバージョンの MySQL でサポートされなくなる予定です。 このようなカラムには、かわりに単純な CHECK 制約の使用を検討してください。

数値カラムに ZEROFILL を指定すると、MySQL によって UNSIGNED 属性が自動的に追加されます。

整数または浮動小数点データ型は、AUTO_INCREMENT 属性を持つことができます。 インデックス付けされた AUTO_INCREMENT カラムに NULL の値を挿入すると、そのカラムは次の順序値に設定されます。 通常、これは value+1 です。ここで value は現在テーブルにあるカラムの最大値です。 (AUTO_INCREMENT の順序は 1 で始まります。)

AUTO_INCREMENT カラムへの 0 の格納は、NO_AUTO_VALUE_ON_ZERO SQL モードが有効になっていないかぎり、NULL の格納と同じ効果があります。

AUTO_INCREMENT 値を生成するために NULL を挿入する場合、カラムを NOT NULL と宣言する必要があります。 カラムが NULL として宣言されている場合、NULL を挿入すると NULL が格納されます。 他の値を AUTO_INCREMENT カラムに挿入すると、カラムはその値に設定され、次に自動的に生成される値が挿入された値から順番に続くように順序がリセットされます。

AUTO_INCREMENT カラムの負の値はサポートされていません。

CHECK 制約は、AUTO_INCREMENT 属性を持つカラムを参照することも、CHECK 制約で使用される既存のカラムに AUTO_INCREMENT 属性を追加することもできません。

MySQL 8.0.17 では、FLOAT および DOUBLE カラムに対する AUTO_INCREMENT のサポートは非推奨になりました。将来のバージョンの MySQL で削除される予定です。 このようなカラムから AUTO_INCREMENT 属性を削除するか、整数型に変換することを検討してください。


関連キーワード:  カラム, 属性, 数値, クラス, 表示, AUTO, INCREMENT, 空間, リファレンス, 範囲