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)となっています。今後のバージョンアップを見据えるなら、表示幅に依存しない設計を心がけるのが良いでしょう。
-
MySQLとPostgreSQLの違いを徹底解説!特徴と比較ポイント
データベースの選定において、多くの開発者が候補に挙げるのがMySQLとPostgreSQLです。どちらも世界中で広く利用されているオープンソースのデータベースですが、設計思想や搭載されている機能には重要な違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。MySQLとはリレーショナルデータベース管理システム(RDBMS)です。Oracle Corporation(オラクル社)によって開発・提供されています。Windows、macOS、Linux、BSD、UNIX、z/OSなど、幅広いプラットフォームに対応しています。システムの拡張性には制約があり、基本的には標準的な構成
-
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への定