Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

MySQLでテーブルを作成する場合など、int(11)のように()内に様々な数値が設定されているのを見かけます。

この()内の数値をサイズ指定と勘違いしている方も多いようですが、実際にはZEROFILLオプションを指定した際の表示幅指定となります。

本記事では、MySQLでの整数型(int)の取り扱いについて、多くの方が勘違いしているサイズ指定とゼロ埋め表示幅指定の違いを解説していきたいと思います。

MySQLでデータサイズが決まるのはint, tinyintなどのデータ型


まず結論として、MySQLで整数型のデータサイズが決まるのは「データ型」に何を指定したかで決まります。

MySQLの整数型には5種類のデータ型が存在する

MySQLには整数型として下記の5種類が提供されています。

  • tinyint
    符号あり:-128 ~ 127
    符号なし:0 ~ 255
  • smallint
    符号あり:-32768 ~ 32767
    符号なし:0 ~ 65535
  • midiumint
    符号あり:-8388608 ~ 8388607
    符号なし:0 ~ 16777215
  • int
    符号あり:-2147483648 ~ 2147483647
    符号なし:0 ~ 4294967295
  • bigint
    符号あり:-9223372036854775808 ~ 9223372036854775807
    符号なし:0 ~ 18446744073709551615

整数型で指定出来るオプション項目とは?!

上述した5つの整数型には「UNSIGNED」と「ZEROFILL」というオプション項目が設けられています。

UNSIGNED

まず「UNSIGNED」に関してですが、上記の整数型で紹介した「符号あり」「符号なし」のどちらを選択するか決定することが可能となります。

UNSIGNEDを設定した場合、マイナスの値の格納は出来なくなり0以上の整数値データのみが取り扱い可能となります。

実際の指定方法は下記の通りとなります。

CREATE TABLE sample(id INT UNSIGNED);

UNSIGNEDを指定せずに下記のようにCREATE文を発行した場合には、デフォルトでマイナスの値が格納出来るように設定されます。

CREATE TABLE sample(id INT);

ZEROFILL

次に「ZEROFILL」オプションですが、本記事のテーマでもある「int(数値)」の設定数値が影響するオプション項目です。

ZEROFILLを設定した場合、カッコ内で指定した数値の桁数になるようにゼロ埋め処理が実施されます。

ポテパンダの一言メモ

ゼロ埋め処理とは、指定された桁数に値を揃えるために、本来定義したい数値の左側に不足している桁数分「0」を付加する処理を指します。

実際の指定方法は下記の通りとなります。

CREATE TABLE sample(id INT(11) ZEROFILL);
ポテパンダの一言メモ

ZEROFILLを指定した場合、自動的に「UNSIGNED」が設定された状態になることも合わせて覚えておきましょう。

MySQLでint(11)と指定されるカッコ内の数値について確認してみよう!


MySQLでの整数型の基本情報を理解して頂いたところで、整数型のカラムを作成する際に記述される「int(数値)」の意味についてサンプルSQLを交えながらご紹介していきたいと思います。

ZEROFILLの指定有り無しでテーブルを作成してみよう

まず整数型intのカラムを「ZEROFILL」オプションを付けたカラム・付けていないカラムの2つでテーブルを作成してみたいと思います。

CREATE TABLE sample(column1 int, column2 int ZEROFILL);

実際に値を設定してみます。

INSERT INTO sample VALUES(12345, 12345);

テーブルの中身を確認してみると下記のようになっています。

+---------+------------+
| column1 | column2    |
+---------+------------+
|   12345 | 0000012345 |
+---------+------------+

ZEROFILLを指定したcoloum2のデータがゼロ埋めされているのがご確認頂けます。

10桁になるようにゼロ埋めされているのはintの最大値「4294967295」が10桁であることに起因します。

int()に数値を指定してテーブルを作成してみよう

次にテーブル作成時、ZEROFILLオプションを付けると同時にint()のカッコ内に数値を設定してみましょう。

ポテパンダの一言メモ

本記事作成時は「drop table」コマンドで一度「sample」テーブルを削除してから都度SQLを実行しています。
記事の順に沿ってご自身の環境でSQLを実行している場合、テーブル名を変更するか上記で作成したテーブルを削除しておきましょう。

サンプルSQLは下記の通りとなります。

CREATE TABLE sample(column1 int(3) ZEROFILL, column2 int(8) ZEROFILL);

次に値を設定してみます。

INSERT INTO sample VALUES(12, 12);
+---------+----------+
| column1 | column2  |
+---------+----------+
|     012 | 00000012 |
+---------+----------+

それぞれのカラムでテーブル作成時に指定したカッコ内の桁数になるようゼロ埋めされていることがご確認頂けます。

int()に指定した数値を超える桁数の値がINSERTされたらどうなるの?

ここで疑問に思う方もいらっしゃるかもしれませんが、テーブル作成時に指定した表示桁よりも大きい値がINSERTされた場合にはどのような挙動になるのでしょうか?

上記で作成した「sample」テーブルに下記のINSERT文でデータを格納したいと思います。

INSERT INTO sample VALUES(12345, 12345);

実行した結果は下記のようにデータが格納されています。

+---------+----------+
| column1 | column2  |
+---------+----------+
|   12345 | 00012345 |
+---------+----------+

最初にお伝えしたように、MySQLでデータサイズが決まるのはあくまで「smallint」「bigint」といったデータ型によるもので、カッコ内の文字列はゼロ埋めするための表示桁数でしかありません。

つまり指定した桁数よりも大きい表示桁となる数値がINSERTされた場合には、指定した桁数とは関係なくINSERT文で指定したデータが格納されることになります。

ポテパンダの一言メモ

データ型で定義された最大値や最小値の範囲外の値をINSERTしようとするとエラーとなりますので注意しておきましょう。

さいごに:MySQLにおけるint()の意味を理解してテーブル設計に役立てよう!

本記事では、MySQLにおけるint()のカッコ内に設定された値の意味を初心者でも分かるようにサンプルSQLを交えながらご紹介してきました。

文字列型である「varchar()」の場合、カッコ内に指定された数値が登録可能な桁数となるため、intをはじめとした整数型に関しても同じように勘違いしている方も多くいらっしゃいます。

今回の記事の内容を参考に、しっかりと挙動の違いを把握した上でテーブル設計などに役立ててみてください。

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。