MySQL
 Computer >> コンピューター >  >> プログラミング >> MySQL

MySQLのBigInt(20)とInt(20)の違いとは?違いを徹底解説

MySQLにおけるINT型とBIGINT型の基本的な違い

MySQLで使われるINT型BIGINT型の最も大きな違いは、データを格納するために必要なバイト数です。

  • INT型:4バイト(32ビット)の符号付き整数。格納できる値は 232 通りです。
  • BIGINT型:8バイト(64ビット)の符号付き整数。格納できる値は 264 通りです。

具体的な値の範囲で言うと、以下のようになります。

  • INT型:-2,147,483,648 ~ 2,147,483,647
  • BIGINT型:-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807

つまり、非常に大きな数値を扱う可能性があるカラムにはBIGINT型を選ぶのが適切です。

「(20)」という数字の意味に注意

int(20)bigint(20) のように括弧内に書かれた「20」は、格納できる数値の大きさを表すものではありません。これはあくまで「表示幅(display width)」を指定するものです。格納できる値のサイズは、あくまで型自体(INTなら4バイト、BIGINTなら8バイト)によって決まります。

実際の動作を確認するサンプル

ここからは、zerofill を使ったテーブルを作成し、挙動を確認してみましょう。zerofill を指定すると、指定した表示幅に満たない桁数の数値に対して、先頭が0で埋められます。

1. テーブルの作成

mysql> create table IntandBigint20Demo
   -> (
   -> Number int(20) zerofill,
   -> Code BigInt(20) zerofill
   -> );
Query OK, 0 rows affected (0.58 sec)

2. レコードの挿入

テーブルを作成したら、レコードを挿入します。INT型とBIGINT型の両方のカラムに同じ値「987」を入れてみます。

mysql> insert into IntandBigint20Demo values(987,987);
Query OK, 1 row affected (0.16 sec)

3. SELECT文で確認

次に、SELECT文を使ってすべてのレコードを表示してみましょう。

mysql> select * from IntandBigint20Demo;

実行結果は以下の通りです。

+----------------------+----------------------+
| Number               | Code                 |
+----------------------+----------------------+
| 00000000000000000987 | 00000000000000000987 |
+----------------------+----------------------+
1 row in set (0.00 sec)

出力結果からわかること

出力結果をご覧ください。「987」という3桁の数値に対して、先頭に0が17個埋め込まれ、合計20桁で表示されていることがわかります。

Number int(20) zerofill

この結果からも、「20」という指定は表示幅を表していることが理解できます。また、zerofill を使用した場合、そのカラムは自動的に UNSIGNED(符号なし)として扱われる点にも留意してください。

さらに補足すると、MySQL 8.0.17以降では、整数型の表示幅指定は非推奨(deprecated)となっています。今後のバージョンアップを見据えるなら、表示幅に依存しない設計を心がけるのが良いでしょう。

  1. MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント

    データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成

  2. C言語の const int*・int const*・const int* const の違いをわかりやすく解説

    ポインタとはC言語において、*p はポインタが指し示す先に格納された値を表し、p はその値が格納されているアドレス(メモリ上の場所)を表します。このアドレスを保持する変数のことを「ポインタ」と呼びます。const int* と int const*const int* と int const* はまったく同じ意味であり、どちらも「定数intへのポインタ」を表します。このポインタが指し示す先のint型の値は変更できませんが、ポインタ自体は定数ではないため、別の定数intを指すように後から変更することが可能です。const int* constconst int* const は「定数intへの定