MySQLで利用可能な整数型について解説!int(11)のカッコに設定された数値って何?
  • facebookページ
  • twitterページ
  • 2020.01.31

    MySQLで利用可能な整数型について解説!int(11)のカッコに設定された数値って何?

    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以上の整数値データのみが取り扱い可能となります。

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

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

    ZEROFILL

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

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

    ポテパンダの一言メモ

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

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

    ポテパンダの一言メモ

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

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


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

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

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

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

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

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

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

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

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

    ポテパンダの一言メモ

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

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

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

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

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

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

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

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

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

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

    ポテパンダの一言メモ

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

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

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

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

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



    優良フリーランス案件多数掲載中!
    フリーランスエンジニアの案件をお探しなら
    ポテパンフリーランス

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア
    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE