ホームページ  >  記事  >  データベース  >  mysqlのint(1)とint(10)の違いは何ですか

mysqlのint(1)とint(10)の違いは何ですか

WBOY
WBOY転載
2023-05-26 11:42:581784ブラウズ

混乱

最近問題が発生しました。テーブルがある場合は、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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。