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

MySQLのBIGINT(8)は格納できる最大の整数という意味?「8」の本当の意味を解説


結論から言うと、BIGINT(8) の「8」はMySQLが格納できる整数の最大値を表すものではありません。この数字は「表示幅(display width)」の指定であり、データの保存サイズには一切影響しません。

BIGINTの保存サイズと扱える値の範囲

BIGINT型は常に8バイト(64ビット)の固定サイズで格納されます。そのため、括弧内の数値が何であっても、実際に保存できる値の範囲は変わりません。

  • 符号付き(SIGNED):-9223372036854775808 ~ 9223372036854775807
  • 符号なし(UNSIGNED):0 ~ 18446744073709551615

ZEROFILLを使ったBIGINT(8)の動作確認

表示幅がどのように機能するのかを理解するため、BIGINT(8) と ZEROFILL オプションを付けたカラムを持つテーブルを作成してみましょう。

mysql> create table BigIntDemo8
   -> (
   -> Number1 BIGINT(8) not null,
   -> Number2 BIGINT(8) unsigned zerofill not null
   -> );
Query OK, 0 rows affected (0.59 sec)

次に、両方のカラムに対していくつかレコードを挿入します。

mysql> insert into BigIntDemo8 values(1,1);
Query OK, 1 row affected (0.14 sec)

mysql> insert into BigIntDemo8 values(11,11);
Query OK, 1 row affected (0.24 sec)

mysql> insert into BigIntDemo8 values(111,111);
Query OK, 1 row affected (0.14 sec)

mysql> insert into BigIntDemo8 values(1111,1111);
Query OK, 1 row affected (0.18 sec)

mysql> insert into BigIntDemo8 values(11111,11111);
Query OK, 1 row affected (0.10 sec)

mysql> insert into BigIntDemo8 values(111111,111111);
Query OK, 1 row affected (0.21 sec)

SELECT文でテーブル内の全レコードを表示します。

mysql> select * from BigIntDemo8;

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

+---------+----------+
| Number1 | Number2  |
+---------+----------+
|       1 | 00000001 |
|      11 | 00000011 |
|     111 | 00000111 |
|    1111 | 00001111 |
|   11111 | 00011111 |
|  111111 | 00111111 |
+---------+----------+
6 rows in set (0.00 sec)

実行結果からわかること

ZEROFILL を付けた Number2 カラムでは、8桁に満たない値の左側が自動的に「0」で埋められ、常に8桁で表示されていることが分かります。一方、ZEROFILL を付けていない Number1 カラムは、値がそのままの形式で表示されます。

このように、表示幅の指定はあくまで「見せ方」を制御するだけのものであり、格納されるデータそのものには影響しません。値が表示幅を超える場合は、そのまま完全な値が表示されます。

注意点:MySQL 8.0以降では表示幅は非推奨

なお、整数型の表示幅指定はMySQL 8.0で非推奨(deprecated)となりました。将来的なバージョンアップを見据えるなら、表示幅に依存した設計は避け、ゼロ埋めなどのフォーマットが必要な場合はアプリケーション側で処理することが推奨されます。

  1. MySQLの単一クエリでIDが最も高い行を更新する方法

    はい、単一のクエリで実行可能です。まずはサンプル用のテーブルを作成しましょう。mysql> create table DemoTable     (     ID int,     GameScore int     ); Query OK, 0 rows affected (0.55 sec)次に、INSERTコマンドを使用してテーブルにレコードをいくつか挿入します。mysql> insert into DemoTable

  2. MySQLでSELECTクエリの結果を並べ替える方法|ORDER BY句の基本と実践例

    データベース操作では、テーブルから特定のデータや行を抽出することが日常的によくあります。通常、SELECT文で取得した行はテーブル内に格納されている順序で返されますが、場合によっては、特定の列を基準にして昇順または降順で並べ替えた結果を取得したいこともあるでしょう。そんなときに活躍するのが「ORDER BY」句です。以下で具体的な使い方を見ていきましょう。例えば、「name」フィールドを含む複数のカラムを持つテーブルがあるとします。テーブルからすべての行を取得したいけれど、名前のアルファベット順に並べ替えた状態で結果を受け取りたい——こうしたケースでは、ORDER BY句を使って「name」フ