MinEMemO

【MySQL(MariaDB)】intの桁設定について

📝 更新日:2020-05-19 / 📄 作成日:2020-05-19
Hero Image
目次

はじめに

先日ひさしぶりにデータベースのテーブル作成をしたときに INT の桁数ってどういう意味だったけ?となったので調べました。

先に答えをいうと ZEROFILLを設定した場合に有効な表示桁数 ということになります。

INT型には、TINYINT、SMALLINT、MEDIUMINT、BIGINT等いくつかありますが、本記事はよく使うINTのみ記載しています。

上記とINTの違いは保存できる数値の大きさになります。

INT型の桁数について

まずサンプルで以下のような設定でテーブルを作成しました。

table_kouzou
table_kouzou

今回気になったのは (3) の部分。
調べてすぐ出てくるのは桁数という回答。

実際に3桁になるのか登録して確認。

table_data01
table_data01

うん。4桁入ってしまっている。
こうなると(3)の桁数の意味がわからない。

実際何なのかしらべたら、(3)は表示桁数とのこと。

表示桁数っていっても実際は4桁はいってる!ってなりますが、この桁数の設定はZEROFILLという0埋めを設定したときに始めて意味があるものらしいです。

なるほど..さっそく試してみよう!
構造>>変更から属性を「UNSIGNED ZEROFILL」 に変えます。

table_data02
table_data02

すると3桁もないデータ「1」は以下のように3桁で0埋めになります。

table_data03
table_data03

上記画像のとおり、(3)は「UNSIGNED ZEROFILL」を適用したときの桁数ということだったんですね。

じゃあINTはどこまでの数値が入るの?

という疑問ですが、初期設定では 4バイトの「-2,147,483,648 ~ 2,147,483,647」の範囲 が入ります。

2,147,483,647を超えた場合は2,147,483,647で登録されます。

試しに2147483647+1の2147483648をINSERTしてみます。

SQL
INSERT INTO `int_test`(`test`) VALUES (2147483648)

結果は 2147483648 は 2147483647 で登録されています。

table_data04
table_data04
これで(3)の桁数の意味がわかってすっきりしました。

なお桁数を設定しなかった場合は(11)で設定されます。

(11)はデフォルトらしいのですが、個人的には正直ZEROFILLを使うことは少なそうなので(11)でいいか。という結論になりました。

またZEROFILLを設定した場合はかならずUNSIGNEDになります。
以下参考までに。

UNSIGNEDとは

INTの初期設定では4バイトの「-2,147,483,648 ~ 2,147,483,647」の範囲で数値の登録が可能です。
UNSIGNEDを設定した場合は 「0 ~ 4,294,967,295」の範囲 で登録が可能になります。

データーベース系は意外とネット上に情報が少ないので、難しいです! 日々精進!!
profile_icon
taka
プログラマー
2017年11月から業務でPHPを触りだしたエンジニアです。 業務経験8年程度。 2022年から「要求整理→設計→実装→テスト→リリース」と開発のステップをきちんと経験したく、 様々な会社を経験しました。 現職が自社案件枯渇、本社エリア以外のSES案件の繋がりがなしと急に発覚し、急遽強制的に転職活動中。 現職をやめるつもりはなかったし、転職は本当に最後にしたいのでもしよければお声がけください。 【GitHub コードサンプル】 https://github.com/tm-qc - Docker、MVC、CRUD、認証、テストなどのサンプルコード(Laravel、ASP.NET CORE) - 経験PJ詳細まとめ