知っておけばよかった! MySQL BigInt(20) と Int(20) の落とし穴

2024-04-02

MySQL の型: BigInt(20) と Int(20) の違い

MySQL で数値データを格納する際、INTBIGINT という2つの主要なデータ型があります。どちらを選ぶべきか迷うこともあるでしょう。

まず、INT(20)BIGINT(20) の括弧内の数字は、表示幅 を指定するものであり、格納できる値の範囲 を制限するものではありません。

データ型許容値範囲必要なストレージ
INT-2,147,483,648 ~ 2,147,483,6474バイト
BIGINT-9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,8078バイト

詳細

  • INT 型は、4バイトのストレージを使用し、-2,147,483,648 から 2,147,483,647 までの範囲の値を格納できます。多くの場合、この範囲で十分なため、デフォルトで INT 型が使用されます。
  • BIGINT 型は、8バイトのストレージを使用し、-9,223,372,036,854,775,808 から 9,223,372,036,854,775,807 までの非常に大きな範囲の値を格納できます。
  • 格納する値の範囲が INT 型の許容範囲内に収まる場合は、INT 型を選択するべきです。これは、4バイトの方が8バイトよりもストレージ効率が良いためです。
  • 格納する値の範囲が INT 型の許容範囲を超える場合は、BIGINT 型を選択する必要があります。

補足

  • INT(20)BIGINT(20) のように、括弧内に数字を指定すると、その数字が 表示幅 になります。これは、データがどのように表示されるかを制御します。
  • 例えば、INT(20) 型の値が 12345 であっても、表示幅が20に設定されているため、00000000000000012345 のように表示されます。
  • 表示幅は、データの格納や比較には影響しません。



-- テーブル作成
CREATE TABLE test (
  id INT,
  big_id BIGINT
);

-- データ挿入
INSERT INTO test (id, big_id) VALUES (12345, 1234567890123456789);

-- データ確認
SELECT * FROM test;

-- 結果
+------+-------------------+
| id   | big_id            |
+------+-------------------+
| 12345 | 1234567890123456789 |

-- INT 型の最大値を超える値を挿入
INSERT INTO test (id, big_id) VALUES (9999999999, 9999999999999999999);

-- 結果
ERROR 1264 (22003): Out of range value for column 'id' at row 1

-- BIGINT 型の最大値を超える値を挿入
INSERT INTO test (id, big_id) VALUES (12345, 9223372036854775807);

-- 結果
ERROR 1264 (22003): Out of range value for column 'big_id' at row 1

上記のコードの説明

  1. test というテーブルを作成します。このテーブルには、id という INT 型の列と big_id という BIGINT 型の列があります。
  2. id 列に 12345、big_id 列に 1234567890123456789 という値を挿入します。
  3. SELECT * FROM test コマンドを実行して、テーブルの内容を確認します。
  4. id 列に 9999999999 という値を挿入しようとしますが、これは INT 型の最大値を超えているため、エラーが発生します。

このサンプルコードからわかること

  • INT 型は、-2,147,483,648 から 2,147,483,647 までの範囲の値を格納できます。



その他の比較方法

  • ストレージ容量
  • パフォーマンス

INT 型は BIGINT 型よりも処理速度が速くなります。パフォーマンスが重要な場合は、INT 型を選択することを検討する必要があります。

  • 将来性

将来、より大きな値を格納する必要が生じる可能性がある場合は、BIGINT 型を選択することを検討する必要があります。

INT 型と BIGINT 型のどちらを選択するかは、格納する値の範囲、ストレージ容量、パフォーマンス、将来性などを考慮して決定する必要があります。


mysql types


MySQL - UPDATE クエリと SELECT クエリの組み合わせ

MySQL では、SELECT クエリで取得した結果に基づいて、UPDATE クエリを実行することができます。これは、特定の条件に合致するレコードを効率的に更新したい場合に役立ちます。基本的な構文例customers テーブルの age 列が 30 歳以上の顧客の discount 列を 10% に更新する...


データベースの接続状況を把握しよう!特定のDBへの接続をすべて表示する方法

これは最も簡単な方法で、すべての接続情報を含むプロセスリストを表示できます。このコマンドは、以下の情報を含むすべてのスレッド(接続)のリストを出力します。ID: 接続の識別番号USER: 接続しているユーザー名HOST: 接続しているホスト名...


サンプルコードで解説:MySQLデータベースにおけるコメントといいね機能

この文書では、MySQLデータベースにおけるコメントといいね機能の実装について、設計パターンと具体的な設計例を紹介します。対象読者データベース設計の基礎知識を持つ開発者MySQLデータベースを用いたアプリケーション開発者コメントといいね機能の実装方法を学びたい方...


AWS RDS で Django アプリケーションから MySQL に接続できない問題の解決策

AWS RDS に構築された MySQL データベースに、ローカルマシンにある Django アプリケーションから接続できない。原因:この問題は、以下のいずれかの原因が考えられます。ネットワークの問題:ファイアウォール設定が適切にされていないセキュリティグループの設定が間違っているRDS エンドポイントにアクセスできない...


クエリキャッシュのパフォーマンスを最大限に引き出す:query_cache_sizeとquery_cache_limitの最適化ガイド

query_cache_sizeとquery_cache_limitは、MySQLとMariaDBで利用可能なクエリキャッシュに関するシステム変数です。どちらもクエリキャッシュの動作に影響を与えますが、異なる役割を果たします。query_cache_size...