2

以下をMySQLに挿入しようとすると

INSERT INTO `rooms` (`id`, `ip`) VALUES ('131213', '-259857341');

次のエラーで失敗します:

Warning: #1264 Out of range value for column 'ip' at row 1

私は周りを見回していますが、それを修正または解決する方法を見つけていません...

私のフィールドはunsignedintであり、そのエントリに対しては問題なく機能するはずです。

問題は何ですか?どうすれば解決できますか?

inet_ntoa / atonを使用してipsを格納したかったので、unsignedintを使用しています。

編集:

MySQLWebサイトで推奨されているようにunsignedINTを使用しています。

INET_ATON()によって生成された値を格納するには、符号付きINTではなくINTUNSIGNED列を使用します。符号付き列を使用すると、最初のオクテットが127より大きいIPアドレスに対応する値を正しく保存できません。セクション10.6「範囲外およびオーバーフローの処理」を参照してください。

http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html

4

4 に答える 4

7

UNSIGNED INTの場合、負の数は範囲外です。特定のデータ型で許可される値の完全なリストについては、ドキュメントをお読みください。

于 2011-07-08T07:54:42.337 に答える
3

符号なし整数は、少なくとも非負の値を意味します。

これが必要かどうかはわかりませんが、ipconverter( http://www.silisoftware.com/tools/ipconverter.php)のように、符号付き整数を4バイトの符号なし整数に変換してみることができます。

INSERT INTO `rooms` (`id`, `ip`) VALUES ('131213', '-259857341' & 0xffffffff);
于 2011-07-08T08:00:05.357 に答える
2

unsigned intまず、定義上、フィールドに負の数を挿入することはできません。フィールドをint代わりに変更します(または、可能であれば負でない数を使用します)。

次に、挿入された数値を囲む一重引用符を削除して、値がではintなく、として扱われるようにする必要があると思いますstring

于 2011-07-08T08:01:08.170 に答える
1

INTフィールドをBIGINTに変更すると、スムーズに機能します。

于 2017-05-24T19:02:46.400 に答える