2011-08-13 6 views
1

私は、主キーID(autoincremented)を持っているmysqlとint(11)のテーブルを持っています。次に、いくつかのテキストファイルを読み込み、idカラムに値を入力するプログラムがあります。 SO私のテーブルがmysqlのint(11)データ型に関する問題|それはint(11)の最大範囲の原因ですか?

id 
897413 
791783 


が含まれているしかし、何happpensは私がint(11)が保持できるというのが私のtable.Isで最大値のこのbeacuseを大きな数字を見つける傾けることであるべきで、(11)INTを増加できますint(20)はまだ同じ問題に直面しています。すでに多くのコードを実装しているので、データ型を大きなintに変換できません。

EDIT: IDが523826の単一レコードを挿入しようとしましたが、450258としてDbに保存されました。なぜですか?

+0

'int'と' bigint'はSQLと同じように処理されます。厳密に型指定された言語を使用している場合は、変数のデータ型を変更する必要がありますが、PHPではコードに悪影響を与えることなくデータ型を変更できるだけです。 –

+0

int(11)が保持できる最大値は何ですか? – Akshay

+0

「ビッグナンバー」はどういう意味ですか? 2147483647より大きい(符号付き 'int'の最大値)? – bfavaretto

答えて

12

intデータ・タイプのmysql manualから定義:

ノーマルサイズの整数。署名された範囲は、符号なし範囲2147483647する-2147483648 0

4294967295に intタイプは、常に4バイト(32ビット)です。 int(11)11は「表示幅」に過ぎず、 UNSIGNED ZEROFILL列のものにすぎません。 this blog postの詳細

+0

id = 523826のレコードを挿入しようとしましたが、450258として挿入されました。どうしたのですか?また、サイズをint(20)に増やしました – Akshay

+0

'INSERT'クエリ? – bfavaretto

+1

INTのサイズを20に増やすことはできません。整数列のカッコ内の数字は、実際には0の値が入力された場合にのみ使用されます。それ以外の場合は、挿入できる値を全く制御できません。 INTは+/- 2147483648または4294967295の外側の値を符号なしに格納することはできません。 – Percy

3

INTのMySQLは32ビットです。 INT(11)は、あなたがIDのために無用である署名されたINTを持っていることを意味します。それを符号なしINTに変更すると、自動的に使用可能なIDの数が2倍になります(誰も負のIDを使用しないため)。 11が "大きく見えますが"、それは11桁の最大負の数(-2147483648)であれば、その数字の長さを考慮に入れるからです。

BIGINTでは、符号付きまたは符号なしの64ビットまで拡張できます。ここでも、unsignedは2倍のID(> 0)を許可します。

上記のように、PHPが64ビット整数をサポートしていない場合は、簡単に使用できません。

希望に役立ちます。

+0

私はjavaとjavaを使用しています。Integerは523826を保持できます.dbに挿入すると問題が発生します – Akshay

+0

使用しているSQLとテーブル構造を指定してください。 – Percy

関連する問題