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
プログラマー
いつでも転職希望の業務経験7年目(2023時点)のエンジニアです。 仕事の合間にすこしずつ転職活動はしていますが、条件が合う場合ぜひTwitterなどでご連絡頂けると嬉しいです。 希望条件は基本的に残業は1日x1h程度。収入は一旦現状維持。 ある程度で構わないので、保守運用が管理されていて、精神的に安心して働ける環境が良いです。 経験言語はHTML、CSS、javascript、PHP、MySQL、Docker、Vuejs、Laravel このブログは完全に自作で静的ジェネレータで作りました。 この範囲で言えば React.js Gatsby.js GraphQLも経験があります。 最近はAIがどう社会に受け入れられ、日常になっていくのかの行く末が気になっています。 今までの人生で一番変化を感じて不思議な感覚です。