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 では、FLOAT
、DOUBLE
および DECIMAL
(およびすべてのシノニム) タイプのカラムに対して UNSIGNED
属性は非推奨であり、将来のバージョンの MySQL でサポートされなくなる予定です。 このようなカラムには、かわりに単純な CHECK
制約の使用を検討してください。
数値カラムに ZEROFILL
を指定すると、MySQL によって UNSIGNED
属性が自動的に追加されます。
整数または浮動小数点データ型は、AUTO_INCREMENT
属性を持つことができます。 インデックス付けされた AUTO_INCREMENT
カラムに NULL
の値を挿入すると、そのカラムは次の順序値に設定されます。 通常、これは
です。ここで value
+1value
は現在テーブルにあるカラムの最大値です。 (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
属性を削除するか、整数型に変換することを検討してください。