ドキュメントによると、括弧内の属性 (たとえば、SMALLINT(3) の「3」) は、SMALLINT の値の表示を 3 桁に制限することになっています。ただし、5 つのテスト番号 (9、99、999、9999、99999) を挿入すると、3 桁で上限を設定するのではなく、それぞれの数値をそのままの値で取得し、それに応じて表示しました (もちろん、99999 を除いて、上限は 32767)。少なくとも表示されている間は、数字を 3 桁に制限すべきではありませんか? それとも、ここで本当の目的を逃していますか?
2 に答える
マニュアルに記載されているように:
M
整数型の最大表示幅を示します。浮動小数点型と固定小数点型の場合、M
は格納できる合計桁数(精度)です。文字列タイプの場合、M
は最大長です。の最大許容値はM
、データ型によって異なります。
さらに、ここで述べたように:
MySQLは、型のbaseキーワードに続く括弧内に整数データ型の表示幅をオプションで指定するための拡張機能をサポートしています。たとえば、表示幅が4桁のを
INT(4)
指定します。INT
このオプションの表示幅は、アプリケーションで、列に指定された幅よりも小さい幅の整数値をスペースで左パディングして表示するために使用できます。(つまり、この幅は、結果セットとともに返されるメタデータに存在します。使用されるかどうかは、アプリケーションによって異なります。)表示幅は、列に格納できる値の範囲を制限しません。また、列の表示幅よりも広い値が正しく表示されるのを妨げることもありません。たとえば、として指定された列
SMALLINT(3)
の通常のSMALLINT
範囲は-32768
〜32767
であり、3桁で許可されている範囲外の値は、3桁を超える数字を使用して完全に表示されます。オプションの(非標準)属性と組み合わせて使用すると
ZEROFILL
、スペースのデフォルトのパディングはゼロに置き換えられます。たとえば、として宣言された列INT(4) ZEROFILL
の場合、の値は。5
として取得され0005
ます。注列が式またはクエリに含まれている場合
、ZEROFILL
属性は無視されます。UNION
表示幅よりも大きい値を属性を持つ整数列に
ZEROFILL
格納すると、MySQLが複雑な結合用の一時テーブルを生成するときに問題が発生する可能性があります。このような場合、MySQLはデータ値が列の表示幅内に収まると想定します。すべての整数型は、オプションの(非標準の)属性を持つことができます
UNSIGNED
。符号なしタイプは、列に負でない数値のみを許可する場合、または列の上限数値範囲を大きくする必要がある場合に使用できます。たとえば、INT
列がUNSIGNED
である場合、列の範囲のサイズは同じですが、その端点はから-2147483648
と2147483647
上にシフト0
します4294967295
。浮動小数点型と固定小数点型も可能です
UNSIGNED
。整数型と同様に、この属性は負の値が列に格納されるのを防ぎます。整数型とは異なり、列値の上限範囲は同じままです。数値列を指定する
ZEROFILL
と、MySQLは自動的にUNSIGNED
属性を列に追加します。整数または浮動小数点データ型は、追加の属性を持つことができます
AUTO_INCREMENT
。NULL
(推奨)または0
インデックス付きの列に値を挿入するAUTO_INCREMENT
と、列は次のシーケンス値に設定されます。通常、これはです。ここで、値は現在テーブルにある列の最大値です。シーケンスは。で始まります。value
+ 1
value
AUTO_INCREMENT
1
整数型の場合、属性は表示幅に関連し、列の作成ステートメントにゼロフィルを追加した場合にのみ表示されます。
表示幅は、列に割り当てられたストレージには影響せず、ゼロフィルが有効になっている場合のパッド付き表示にのみ影響します。
この説明も参照してください:http://matthom.com/archive/2006/11/28/mysql-integer-columns-and-display-width