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

WBOY
リリース: 2023-05-26 11:42:58
転載
1842 人が閲覧しました

混乱

最近問題が発生しました。テーブルがある場合は、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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート