最近問題が発生しました。テーブルがある場合は、user_id フィールドを追加する必要があります。user_id フィールドは非常に大きい可能性があるため、mysql 作業指示書を送信しました alter table xxx ADD user_id int(1)。私の SQL 作業指示を見たリーダーは、「残念ながら、設定した int(1) では不十分かもしれません」と言い、説明を始めました。
私がこの問題に遭遇したのはこれが初めてではなく、この問題に遭遇した人の中には 5 年以上この作業を行っている人もいます。それも含めて、同僚がずっと int(10) を使っているのをよく見かけますが、int(1) を使うとフィールドの上限が制限されるような気がしますが、決してそんなことはありません。
int は mysql で 4 バイトを占めることがわかっているため、unsigned int の最大値は 2^32-1 = 4294967295 で、これはほぼ 40 億になります。 int(1)を使うとこの最大値に達しないのでしょうか?
CREATE TABLE `user` ( `id` int(1) unsigned NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
id フィールドは unsigned int(1) です。最大値を挿入して確認してください。
mysql> INSERT INTO `user` (`id`) VALUES (4294967295); Query OK, 1 row affected (0.00 sec)
これは成功していることがわかります。つまり、int の後の数値は、int 自体がサポートするサイズに影響を与えません。int(1)、int(2)...int の間に違いはありません。 (10)。
一般に、int の後の数値は、ゼロ埋め込みで使用した場合にのみ有効です。まず例を見てみましょう:
CREATE TABLE `user` ( `id` int(4) unsigned zerofill NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
int(4) の後にゼロフィルが追加されていることに注意してください。最初に 4 つのデータを挿入しましょう。
mysql> INSERT INTO `user` (`id`) VALUES (1),(10),(100),(1000); Query OK, 4 rows affected (0.00 sec) Records: 4 Duplicates: 0 Warnings: 0
4 つのデータ、それぞれ 1、10、100、1000 を挿入し、クエリを実行します。
mysql> select * from user; +------+ | id | +------+ | 0001 | | 0010 | | 0100 | | 1000 | +------+ 4 rows in set (0.00 sec)
データを通じて、int(4) zerofill が充填を実現していることがわかります。 4桁未満は0 現象、int(4)だけではダメ。
0001 の場合、基礎となるストレージは 1 のままですが、表示されるストレージは 0 で埋められます。
以上がmysqlのint(1)とint(10)の違いは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。