【MySQL初心者向け】INT(11) vs INT(M): それぞれの違いと使い分けを徹底解説

2024-07-27

MySQLにおける INT(11)INT(M) の違い

MySQLの整数型データ型において、INT(11)INT(M) の表記がよく見られます。一見似ているように見えますが、実は微妙な違いがあります。この違いを理解することは、データベース設計とパフォーマンスチューニングにおいて重要です。

データ格納範囲

  • INT(M): 符号付きまたは符号なし整数を格納できます。範囲は、M の値によって異なります。

    • M が 1 から 10: INT(11) と同じ範囲です。
    • M が 11 から 20: より大きな整数を格納できます。範囲は 2^(M-1) から -2^(M-1) - 1 までです。

表示幅

  • INT(M): 表示幅は M 桁です。INT(11) と同様に、実際の格納容量とは関係ありません。
  • INT(11): 表示幅は 11 桁です。これは、数値データを表示する際に、左側を空白で埋める最大桁数を指定します。実際の格納容量とは関係ありません。
  • BIGINT 型を使用する場合は、より大きな整数を格納できます。
  • M には、1 から 20 までの整数を指定する必要があります。
  • INT(M) は、MySQL 5.0.15以降で使用できます。

どちらを選ぶべきか?

一般的には、以下の条件に基づいてデータ型を選択することをお勧めします。

  • 表示幅を揃えたい場合は、INT(M) を使用します。
  • より大きな整数を格納する場合は、INT(M) または BIGINT を使用します。
  • 格納する整数の範囲が -2,147,483,648 から 2,147,483,647 までの場合は、INT(11) または INT を使用します。

CREATE TABLE users (
  id INT(11) PRIMARY KEY AUTO_INCREMENT,
  age TINYINT NOT NULL,
  score BIGINT
);

この例では、id カラムには INT(11) を使用して、最大 10 桁の主キーを格納します。age カラムには、0 から 255 までの値を格納できる TINYINT を使用します。score カラムには、非常に大きな値を格納できる BIGINT を使用します。




CREATE TABLE data_types (
  id INT(11) NOT NULL,
  small_int TINYINT NOT NULL,
  medium_int MEDIUMINT NOT NULL,
  big_int BIGINT NOT NULL,
  unsigned_int INT(10) UNSIGNED NOT NULL
);

INSERT INTO data_types (id, small_int, medium_int, big_int, unsigned_int)
VALUES (1, 127, 65535, 9223372036854775807, 4294967295);

SELECT * FROM data_types;

このコードを実行すると、以下の結果が得られます。

id | small_int | medium_int | big_int                | unsigned_int
---+-----------+------------+------------------------+-------------
1  | 127       | 65535      | 9223372036854775807 | 4294967295
  • unsigned_int カラムには、0 から 4,294,967,295 までの値を格納できます。
  • big_int カラムには、-9,223,372,036,854,775,807 から 9,223,372,036,854,775,807 までの値を格納できます。
  • medium_int カラムには、-32,768 から 32,767 までの値を格納できます。
CREATE TABLE data_display (
  id INT(5) NOT NULL,
  value INT(11) NOT NULL
);

INSERT INTO data_display (id, value)
VALUES (1, 12345);

SELECT * FROM data_display;
id | value
---+-------
1  | 0012345
  • value カラムは INT(11) 型ですが、表示幅は INT(5) に指定されています。そのため、値は左側を 0 で埋めて 5 桁で表示されます。

INT(M) の使用例

CREATE TABLE large_numbers (
  id INT(20) NOT NULL AUTO_INCREMENT,
  large_value BIGINT NOT NULL
);

INSERT INTO large_numbers (large_value)
VALUES (12345678901234567890);

SELECT * FROM large_numbers;
id | large_value
---+------------------------------------------
1  | 12345678901234567890
  • large_value カラムは INT(20) 型を使用しています。これは、BIGINT 型よりも大きな整数を格納できます。



INT(11)INT(M) 以外の選択肢

TINYINT

  • INT(11)INT(M) よりも小さいメモリ容量と CPU 使用量で済みます。
  • 主に、小さな整数を格納する場合に使用されます。
  • -128 から 127 までの値を格納できます。
  • 1 バイトの領域を使用します。

SMALLINT

  • TINYINT よりも大きな整数を格納する場合に使用されます。

MEDIUMINT

  • INT(11) と同程度のメモリ容量と CPU 使用量になります。
  • -2,147,483,648 から 2,147,483,647 までの値を格納できます。

BIGINT

  • BIT 型: ビット列を格納します。
  • BOOLEAN 型: 真偽値を格納します。

どのデータ型を選択すべきか

適切なデータ型を選択するには、以下の要素を考慮する必要があります。

  • 将来の拡張性
  • 表示形式
  • メモリ容量と CPU 使用量
  • 格納する値の範囲

一般的には、必要な最小限の大きさのデータ型を選択することが推奨されます。例えば、0 から 255 までの値を格納する場合は、TINYINT 型を使用する方が効率的です。


mysql



Liquibase、MySQLイベント通知、バージョン管理... あなたのプロジェクトに最適なDB スキーマ変更追跡ツールは?

データベーススキーマは、時間の経過とともに変更されることがよくあります。新しい機能を追加したり、既存の機能を改善したり、パフォーマンスを向上させたりするために、テーブルの追加、削除、変更が必要になる場合があります。このようなスキーマ変更を追跡することは、データベースの整合性と開発者の生産性を維持するために重要です。...


MySQL自動ダイアグラム生成について

MySQLの自動データベースダイアグラム生成は、MySQLデータベースの構造を視覚的に表現するためのツールや方法です。これにより、データベース設計の理解、分析、修正が容易になります。MySQL Workbench: MySQLの公式GUIツールであり、データベース設計、管理、開発に幅広く利用されます。 データベース逆エンジニアリング機能により、既存のMySQLデータベースから自動的にダイアグラムを生成できます。 関係性、データ型、制約条件などの情報を視覚化します。...


MySQL複数更新解説

MySQLでは、一つのクエリで複数の行を更新することが可能です。これを 複数更新 (Multiple Updates) と呼びます。WHERE condition: 更新する行を指定する条件式です。value1, value2, ...: 各列に設定したい新しい値です。...


MySQL ログイン情報確認方法

MySQLのユーザー名とパスワードは、データベースシステムへのアクセス権限を管理するために使用されます。これらの情報が失われた場合、データベースへのアクセスが不可能になります。一般的な方法:MySQL Workbenchの使用:MySQL Workbenchを起動します。"Admin"メニューから"Manage Connections"を選択します。接続プロファイルを選択し、プロパティをクリックします。"User"タブでユーザー名とパスワードを確認できます。...


データベース管理を賢く!開発、テスト、本番環境に合わせたMySQLとSVNの活用術

開発環境データベーススキーマのバージョン管理: SVNリポジトリにスキーマ定義ファイル(DDL)を格納し、バージョン管理を行います。変更履歴を把握し、必要に応じてロールバックすることができます。ダンプファイルによるデータ管理: 開発中のデータは、定期的にダンプファイルとしてバックアップし、SVNリポジトリとは別に管理します。ダンプファイルを用いることで、データベースの状態を特定の時点に復元することができます。...



SQL SQL SQL Amazon で見る



ストアドプロシージャ、ライブラリ、フレームワーク...MySQLでバイナリデータを扱うためのツール

TEXT:可変長の文字列型。最大65, 535バイトから4GBまで保存できます。バイナリデータだけでなく、文字列も保存できます。BLOB:可変長のバイナリデータ型。最大65, 535バイトから4GBまで保存できます。VARBINARY:可変長のバイナリデータ型。最大65


アプリケーションロジックでテーブル更新を制御する方法

MySQLトリガーは、特定のデータベース操作に対して自動的に実行されるコードです。トリガーを使用して、テーブル更新を防止するエラーをスローすることができます。例:以下の例は、usersテーブルのage列が18歳未満の場合に更新を防止するトリガーです。


データ移行ツール、クラウドサービス、オープンソースツールを使って SQL Server 2005 から MySQL へデータを移行する

このチュートリアルでは、SQL Server 2005 から MySQL へデータを移行する方法について 3 つの方法を説明します。方法 1: SQL Server Management Studio を使用方法 2: bcp コマンドを使用


INSERT INTOステートメントのIGNOREオプションでMySQL REPLACE INTOを代替

MySQLのREPLACE INTOコマンドは、SQL Server 2005では完全に同じように実装されていません。しかし、いくつかの代替方法を用いることで、同様の動作を実現することができます。REPLACE INTO とはREPLACE INTOは、INSERT INTOと似ていますが、以下の点が異なります。


MySQL データベースの性能低下

MySQL データベースのサイズが大きくなるにつれて、パフォーマンスが低下することがあります。この現象の主な原因は、以下の要因に起因します:インデックス: インデックスは、データの検索を高速化しますが、大きなデータベースではインデックスの更新も頻繁に行われ、ディスク I/O の負荷が増加します。