はじめに
先日ひさしぶりにデータベースのテーブル作成をしたときに INT の桁数ってどういう意味だったけ?となったので調べました。
先に答えをいうと ZEROFILLを設定した場合に有効な表示桁数 ということになります。
INT型には、TINYINT、SMALLINT、MEDIUMINT、BIGINT等いくつかありますが、本記事はよく使うINTのみ記載しています。
上記とINTの違いは保存できる数値の大きさになります。
INT型の桁数について
まずサンプルで以下のような設定でテーブルを作成しました。
今回気になったのは (3) の部分。
調べてすぐ出てくるのは桁数という回答。
実際に3桁になるのか登録して確認。
うん。4桁入ってしまっている。
こうなると(3)の桁数の意味がわからない。
実際何なのかしらべたら、(3)は表示桁数とのこと。
表示桁数っていっても実際は4桁はいってる!ってなりますが、この桁数の設定はZEROFILLという0埋めを設定したときに始めて意味があるものらしいです。
構造>>変更から属性を「UNSIGNED ZEROFILL」 に変えます。
すると3桁もないデータ「1」は以下のように3桁で0埋めになります。
上記画像のとおり、(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してみます。
INSERT INTO `int_test`(`test`) VALUES (2147483648)
結果は 2147483648 は 2147483647 で登録されています。
これで(3)の桁数の意味がわかってすっきりしました。
なお桁数を設定しなかった場合は(11)で設定されます。
(11)はデフォルトらしいのですが、個人的には正直ZEROFILLを使うことは少なそうなので(11)でいいか。という結論になりました。
またZEROFILLを設定した場合はかならずUNSIGNEDになります。
以下参考までに。
UNSIGNEDとは
INTの初期設定では4バイトの「-2,147,483,648 ~ 2,147,483,647」の範囲で数値の登録が可能です。
UNSIGNEDを設定した場合は 「0 ~ 4,294,967,295」の範囲 で登録が可能になります。