MySQL INT型の完全な分析

MySQL INT型の完全な分析

序文:

Integer は MySQL で最もよく使用されるフィールド型の 1 つで、通常は整数を格納するために使用されます。その中でも int は最もよく使用される整数型です。int 型を本当に理解していますか?この記事では、int 型に関連する知識を習得し、他の整数フィールドの使用方法についても紹介します。

1. 整数の分類と格納範囲

整数型バイト符号付き範囲符号なし範囲
小さな1 -128 ~ 127 0〜255
スモールイント2 -32768 ~ 32767 0 ~ 65535
ミディアムミント3 -8388608 ~ 8388607 0 ~ 16777215
整数/整数4 -2147483648 ~ 2147483647 0 ~ 4294967295
ビッグイント8 -9223372036854775808 ~ 9223372036854775807 0 ~ 18446744073709551615

テーブルには、フィールド タイプ、占有バイト数、符号付き範囲、符号なし範囲の 4 つの列があります。
int 型を例に挙げてみましょう。
int 型は 4 バイトを占めます。コンピュータの原理を学んだことのある学生なら、バイトがコンピュータ ストレージの最小単位ではないことを知っているはずです。バイトよりも小さい単位、つまりビットがあります。1 ビットは 0 または 1 を表します。8 ビットで 1 バイトが構成されます。一般に、バイトは大文字の B で表され、ビットは小文字の b で表されます。

コンピュータの記憶単位の変換: 1B=8b 1KB=1024B 1MB=1024KB

次に、int 型が 4 バイトを格納できるという事実に基づいて、int UNSIGNED 型に格納できる最小値は 0 で、最大値は 4294967295 であると計算できます (つまり、4B = 32b、最大値は 32 個の 1 で構成されます。つまり、4294967295 を 2 進数に変換すると 32 個の 1 になります)。

2. 保管範囲テスト

mysql> CREATE TABLE test_int ( -> col1 TINYINT, -> col2 SMALLINT, -> col3 MEDIUMINT, -> col4 INT, -> col5 BIGINT -> ) ENGINE = INNODB DEFAULT CHARSET = utf8; クエリは正常、0 行が影響を受けました (0.01 秒)
mysql> show create table test_int\G**************************** 1. 行 **************************** テーブル: test_intCreate テーブル: CREATE TABLE `test_int` ( `col1` tinyint(4) DEFAULT NULL, `col2` smallint(6) DEFAULT NULL, `col3` mediumint(9) DEFAULT NULL, `col4` int(11) DEFAULT NULL, `col5` bigint(20) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 秒)
mysql> insert into test_int values ​​(1234,123456,12345678,12345678901,12345678901234567890); クエリは正常、1行が影響を受け、5つの警告(0.00秒)
mysql> insert into test_int values ​​(-1234,-123456,-12345678,-12345678901,-12345678901234567890); クエリは正常、1行が影響を受け、5つの警告(0.01秒)
mysql> show warnings;+---------+------+----------------------------------------------+| レベル | コード | メッセージ |+---------+------+-----------------------------------------------+| 警告 | 1264 | 行 1 の列 'col1' の値が範囲外です || 警告 | 1264 | 行 1 の列 'col2' の値が範囲外です || 警告 | 1264 | 行 1 の列 'col3' の値が範囲外です || 警告 | 1264 | 行 1 の列 'col4' の値が範囲外です || 警告 | 1264 | 行 1 の列 'col5' の値が範囲外です |+---------+------+-----------------------------------------------+セットに 5 行あります (0.01 秒)
mysql> select * from test_int;+------+--------+----------+-------------+--------------+----------------------+| col1 | col2 | col3 | col4 | col5 |+------+--------+----------+-------------+----------------------+| 127 | 32767 | 8388607 | 2147483647 | 9223372036854775807 || -128 | -32768 | -8388608 | -2147483648 | -9223372036854775808 |+------+--------+----------+-------------+----------------------+

上記のテストから、さまざまな整数型に最大保存範囲がある場合、保存された数値のサイズが保存範囲内にない場合、MySQL はアラームを生成しますが、数値を挿入することはでき、デフォルト値は保存できる最大値または最小値に切り捨てられることがわかります。

3. int(M) の M の意味とゼロフィルの使用

よく次のような文を耳にします。int(M) の M は最大表示幅を表します。「最大表示幅」に対する私たちの最初の反応は、フィールドに格納できる値の最大幅です。int(1) を作成すると、データ 10 を格納できないと考えます。実際、これは意味が異なります。
整数列の表示幅は、MySQL が列の値を表示するために必要な文字数とは関係なく、整数に必要なストレージ容量とも関係ありません。たとえば、表示幅を何文字に設定しても、int は 4 バイト、bigint は 8 バイトを占めます。つまり、int(5)とint(10)の記憶範囲は同じです。
整数フィールドには ZEROFILL 属性 (0 パディング) があり、設定された長さに達するまで長さが足りないデータの先頭を 0 で埋めます。 M は、ZEROFILL を追加した後は動作が異なります。ZEROFILL を使用すると、デフォルトで unsigned 属性が自動的に追加されます。たとえば、INT(3) ZEROFILL が使用され、データベースに 10 を挿入すると、実際に挿入される値は 010 となり、先頭に 0 が追加されます。テストしてみましょう。

mysql> CREATE TABLE test_int_zerofill ( -> col1 INT(5) ZEROFILL, -> col2 INT ZEROFILL, -> col3 INT(5) -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8; クエリは正常、0行が影響を受けました (0.01秒)
mysql> show create table test_int_zerofill\G**************************** 1. 行 **************************** テーブル: test_int_zerofillCreate テーブル: CREATE TABLE `test_int_zerofill` ( `col1` int(5) unsigned zerofill DEFAULT NULL, `col2` int(10) unsigned zerofill DEFAULT NULL, `col3` int(5) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)
mysql> insert into test_int_zerofill values ​​(12,12,12); クエリは正常、1行が影響を受けました (0.00 秒)
mysql> select * from test_int_zerofill;+-------+------------+------+| col1 | col2 | col3 |+-------+------------+------+| 00012 | 000000012 | 12 |+-------+------------+------+セット内の行が 1 個あります (0.00 秒)

ゼロフィルの適用シナリオは何かと尋ねる学生もいるかもしれません。最も一般的なのは、月や日付の前に0を追加して、表示をより標準化することです。

CREATE TABLE `t_zerofill` ( `year` year(4) DEFAULT NULL、 `month` int(2) unsigned zerofill DEFAULT NULL、 `day` int(2) unsigned zerofill DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
mysql> insert into t_zerofill values ​​(2019,6,5); クエリは正常、1行が影響を受けました (0.01秒)
mysql> insert into t_zerofill values ​​(2019,6,18); クエリは正常、1行が影響を受けました (0.00 秒)
mysql> insert into t_zerofill values ​​(2019,10,1); クエリは正常、1行が影響を受けました (0.00 秒)
mysql> insert into t_zerofill values ​​(2019,11,11); クエリは正常、1行が影響を受けました (0.01秒)
mysql> select * from t_zerofill;+------+-------+------+| 年 | 月 | 日 |+------+-------+------+| 2019 | 06 | 05 || 2019 | 06 | 18 || 2019 | 10 | 01 || 2019 | 11 | 11 |+------+-------+------+セットに 4 行あります (0.00 秒)

4. タイプの選択

上記の導入後、さまざまな整数フィールドの選択がはるかに簡単になります。もちろん、ストレージを最小化する原則に沿って、SMALLINT よりも TINYINT を選択し、INT よりも MEDIUMINT を選択する必要があります。ただし、すべてはビジネスを満たすという前提の下で行われるべきであり、可能な限り占有バイト数の少ない型を選択する必要があります。正の整数のみを格納するように指定されているフィールドには、unsigned 属性を追加して格納範囲を拡張することができます。たとえば、フィールドに AUTO_INCREMENT 属性がある場合、int 型に unsigned 属性を追加することができます。

上記はMySQL INT型の完全分析の詳細な内容です。MySQL INT型の詳細については、123WORDPRESS.COMの他の関連記事に注目してください。

以下もご興味があるかもしれません:
  • MySQL データ型 int(M) の M の意味の詳細な説明
  • Mysql データベースで varchar 型を int 型に変換する方法
  • MySQL で自動増分主キーの型を int から char に変更する例
  • MySQL での replace と replace into の使い方の説明
  • MySQL における int の最大値の詳細な説明
  • MySQL が外部キーエラーを追加します: 1215 外部キー制約ソリューションを追加できません
  • MySQLの日付型とint型を変換する方法
  • MySQL データベースで int を varchar に変換するとクエリが遅くなる

<<:  React のグローバル状態管理の 3 つの基本メカニズムの調査

>>:  Ubuntu での CUDA と CUDNN のインストールとアンインストールの実装

推薦する

Docker nginxは1つのホストを実装して複数のサイトを展開します

とあるサイトからレンタルした仮想マシンの有効期限が近づいており、更新料が200元以上かかります。Al...

MySQL 8.0.17 をインストールしてリモート アクセスを構成する方法

1. インストール前の準備データベースのバージョンを確認するコマンド: mysql --versio...

React+Antdはテーブルの追加、削除、変更の例を実装します

目次テーブル/index.jsテーブル/モデル/index.jsテーブル/モデル/モジュール/bas...

MySQL のユニークインデックスと通常のインデックスのどちらを選択すればよいでしょうか?

ユーザー テーブルを設計するときに、各人の ID 番号が一意であり、検索する必要があるシナリオを想像...

CSS3 transition-delay属性のデフォルト値が単位なしの0であり無効である問題を解決します

今日は、CSS3 の transition-delay 属性のデフォルト値 0 に単位がないのは無効...

Nexus サーバーを設定するための詳細な手順

1. ネクサスサービス構築の意義イントラネットの統合プロキシとして、チームで共同開発する場合、全員が...

VMWARE で Centos8 仮想マシンをコピーすることによって発生する IP 損失の問題の解決策

VMwareでcentos8サービスをインストールしてコピーすると、次の問題が発生します。 コピー前...

CSS 垂直センタリングの代替実装コードの詳細な説明(非従来型)

序文ご存知のとおり、「CSS で要素を垂直方向に中央揃えするにはどうすればよいか」という質問は、すで...

React構成サブルーティングの実装

1. コンポーネント First.js にはサブコンポーネントがあります。 './Admin...

Windows 10 に Apache 2.4.41 をインストールするチュートリアル

1. Apache 2.4.41 のインストールと設定最初のステップは、以下に示すように、https...

docker mysqlの起動時に初期化SQLを実行する

1.Mysqlイメージを取得するdocker pull mysql:5.7 2. MySQLイメージ...

CSSを使用してTDのINPUTの幅を設定する

最近、C# を使用して Web プログラムを作成していたときに、次のような問題が発生しました。 Te...

docker を使用して複数のネットワーク インターフェースを持つコンテナーを起動する方法の例

コンテナにネットワークインターフェースを追加する1 デフォルトのネットワークモードでコンテナを実行す...

JavaScript でプライベート メンバーを作成する

目次1. クロージャを使用する2. ES6クラスを使用する3. ES2020提案を使用する4. We...

ノード スキャフォールディングを使用してトークン検証を実装するサーバーを構築する方法

コンテンツスキャフォールディングを使用してノードプロジェクトを素早く構築するデータベースとやり取りす...