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 のインストールとアンインストールの実装

推薦する

MySQLにおけるrow_numberの実装プロセス

1. 背景一般的に、データ ウェアハウス環境では、row_number 関数を使用して特定のディメン...

Vue+Echart 棒グラフで疫病データ統計を実現

目次1. まずプロジェクトにechartsをインストールします2. echartsに縦棒グラフテンプ...

Vue の基本 MVVM、テンプレート構文、データバインディング

目次1. Vueの概要Vue公式サイトMVVM アーキテクチャ パターンVue の紹介2. Vueを...

画像マーキー効果を実現するネイティブJS

今日は、ネイティブ JS で実装された画像マーキー効果を紹介します。効果は次のとおりです。 実装され...

RGBAアルファ透明度変換計算表

IEでのRGBAとフィルター値の変換RGBA 透明度値IE フィルター値0.1 19 0.2 33 ...

JSタイマーを使用して要素を移動する

JS タイマーを使用して、要素に移動する効果のあるメソッドを作成します。実装のアイデアは、まず要素の...

MySQLの暗黙的な変換について話す

作業の過程で、暗黙的な変換が発生するケースが数多くあります。暗黙的な変換は、クエリの速度低下を引き起...

JavaScript における async と await の使い方とメソッド

JS の async 関数と await キーワード 関数ヘルワールド() { 「こんにちは!美しい...

Docker+K8S+GitLab/SVN+Jenkins+Harbor をベースにした継続的インテグレーション配信環境の構築に関する詳細なチュートリアル

目次環境設定の概要1.K8Sとは何ですか? 2. K8S を使用する理由3. K8S を使用する利点...

Tomcat の構成と最適化ソリューションの詳細な説明

サービス.xml Server.xml 構成ファイルは、コンテナー全体を構成するために使用されます。...

Mybatis mysqlの削除操作では、最初のデータメソッドのみを削除できます。

バグ図のように、削除文とパラメータをデータベースにコピーして実行し、2つのデータを削除しようとしたの...

MySQL データベースの show processlist コマンドの使用の分析

実際のプロジェクト開発では、多数のクエリや挿入、特にマルチスレッド挿入など、データベースに大きな負荷...

HTML+CSSプロジェクト開発経験概要(推奨)

ここ数日ブログを更新していませんでした。簡単な HTML+CSS プロジェクトを終えたところです。数...

HTML テーブルの行間隔を変更する方法の例

HTML テーブルを使用する場合、行間隔を変更する必要がある場合がありますが、余白、パディング、折り...

MySQL 制約の種類と例

制約制約によりデータの整合性と一貫性が確保される制約はテーブルレベルの制約と列レベルの制約に分けられ...