MySQL(MariaDB)

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

database

はじめに

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

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

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

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

INT型の桁数について

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

table_kouzou

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

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

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

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

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

たか
たか
なるほど..さっそく試してみよう!

構造>>変更から属性を「UNSIGNED ZEROFILL」に変えます。

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

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してみます。

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

 

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

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」の範囲で登録が可能になります。

たか
たか
データーベース系は意外とネット上に情報が少ないので、難しいです!

日々精進!!