dポイントプレゼントキャンペーン実施中!

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>

なぜこのようなことが起こるのでしょうか?
また、対応策はありますでしょうか?

以上、よろしくお願いいたします。

A 回答 (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-t …
    • good
    • 0
この回答へのお礼

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

教えていただいたURLを熟読してみたいと思います。

ありがとうございました。

お礼日時:2008/08/21 23:20

桁数で1億ということは、



10000....0000 <0が99999999個続く

ということですね。

2147483647 なら桁数は10桁になると思います。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

なるほど、桁数だったのですね。。。勘違いしてました。

どうもありがとうございました。

お礼日時:2008/08/21 23:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!