int(1)とint(11)の違いはありますか?

11052 ワード

MySQLタイプキーワードの後ろの括弧内に整数値の表示幅を指定します(たとえば、INT(11).このオプションの表示幅は、指定された列幅よりも幅が小さい値を表示するときに左側から幅を満たすように規定されています.表示幅は、カラムに保存できる値の範囲を制限するものではなく、カラムの指定幅を超える値の表示を制限するものではありません.
だからINT(1)とINT(11)のデフォルトは何の違いもありません!!!
mysql> desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(1)  | YES  |     | NULL    |       |
| uid   | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> 
mysql> insert into t1 select 123,1234;
Query OK, 1 row affected (0.04 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from t1;
+------+------+
| id   | uid  |
+------+------+
|  123 | 1234 |
+------+------+
1 row in set (0.05 sec)

mysql> 

オプションの拡張属性ZEROFALと組み合わせて使用する場合、デフォルトで追加されたスペースはゼロに置き換えられます.例えば、INT(5)ZEROFALと宣言された列については、値4が00004と検索される.整数列に表示幅を超える値を保存すると、MySQLが複雑な結合のテンポラリ・テーブルを生成するときに問題が発生することに注意してください.これらの場合、MySQLはデータが元の列幅に適していると信じているためです.
すべての整数タイプには、オプション(非標準)属性UNSIGNEDがあります.カラム内で負以外の数だけを許可し、そのカラムに大きな上限値範囲を必要とする場合は、符号なし値を使用します.ZEROFAL拡張属性を設定してみると、デフォルトでは符号なし属性(UNSIGNED)があります
したがって、INT(1)とINT(11)の後の括弧の中の文字は表示幅を表し、整数列の表示幅とMySQLはその列の数値を何文字で表示する必要があるかは、その整数に必要な記憶空間の大きさとは関係なく、INTタイプのフィールドに格納できるデータの上限は2147483647(符号型あり)と4294967295(符号型なし)である.実際にINTを使用するタイプを選択すると、INT(1)もINT(11)もデータベースに4バイトの長さで格納されます.
mysql> desc t2;              
+-------+---------------------------+------+-----+---------+-------+
| Field | Type                      | Null | Key | Default | Extra |
+-------+---------------------------+------+-----+---------+-------+
| id    | int(1) unsigned zerofill  | YES  |     | NULL    |       |
| uid   | int(11) unsigned zerofill | YES  |     | NULL    |       |
+-------+---------------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> 
mysql> insert into t2 select 123456,123456789;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> insert into t2 select 123456,1234567899;
Query OK, 1 row affected (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 0

mysql> select * from t2;                                
+--------+-------------+
| id     | uid         |
+--------+-------------+
| 123456 | 00123456789 |
| 123456 | 01234567899 |
+--------+-------------+
2 rows in set (0.00 sec)

mysql> 

まとめ:
INT(M)ZEROFALは、ZEROFALを加えるとMが異なることを示します.例えばINT(3)ZEROFALは、データベースに挿入するのが10で、実際には010、つまり前に0を追加しました.INT(3)とINT(10)がZEROFALを付けない場合、それらの違いはありません.MはINT列内の保存値の範囲を制限するために使用されない.int(M)の最大値と最小値はUNSIGNEDに関係します.