• ベストアンサー

テーブル作成時に、「`id` int(100000000) 」とやるとエラーになるのはなぜ?対応策は?

MySQLでint型は、 「符号付きの範囲は -2147483648 ~ 2147483647。符号なしの範囲は 0 ~ 4294967295」 と、本やサイトに書いてありますが、 create table時に、 桁数として1億を指定しようとしたら、 以下のように怒られてしまいました。 mysql> create table `page_master` (`id` int(100000000) not null,`lang` varchar(5) not null ,`is_top` tinyint(2) not null,`is_valid` tinyint(1) not null) type = innodb -> ; ERROR 1439 (42000): Display width out of range for column 'id' (max = 255) mysql> なぜこのようなことが起こるのでしょうか? また、対応策はありますでしょうか? 以上、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.2

int型の宣言はint(精度)になります 精度というのは表示桁数です。 ただしintは数値型なので桁数は特殊な場合をのぞき無視されます。 たとえばint(1)とすると一桁しか表示されないのを期待するかもしれませんが 実際には10を表現するときは「1」ではなく「10」と表示されます ではどういう場合につかわれるかというと、 UNSIGNED ZEROFILL のオプションを付けた時に有効になります。 たとえばint(5)で表示するときにはそれぞれ以下のようになります。 1→00001 100→00100 100000→100000※桁があふれた場合はすべて表示する なお指定できる桁数の最大はcharなどの文字列型と同等に255桁が最大ですが 実際のデータ精度から考えてもそんな桁数は必要なく、11桁が標準値と なっています。 http://dev.mysql.com/doc/refman/4.1/ja/numeric-types.html

m_etc
質問者

お礼

詳細な情報&知らなかった情報をお教えくださってありがとうございます。 教えていただいたURLを熟読してみたいと思います。 ありがとうございました。

その他の回答 (1)

  • redasurc
  • ベストアンサー率37% (3/8)
回答No.1

桁数で1億ということは、 10000....0000 <0が99999999個続く ということですね。 2147483647 なら桁数は10桁になると思います。

m_etc
質問者

お礼

ご回答ありがとうございました。 なるほど、桁数だったのですね。。。勘違いしてました。 どうもありがとうございました。

関連するQ&A