2011-07-08 38 views
1

當我嘗試插入下面的進入我的MySQL#1264超出範圍值修復?

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

我失敗,與後續的錯誤:

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

我環顧四周,但還沒有找到如何解決或解決它。 ..

我的字段是無符號int這應該工作得很好,爲該條目。

什麼問題,我該如何解決?

我使用unsigned int因爲我想用inet_ntoa/aton來存儲ips。

編輯:

我使用unsigned int類型的建議在MySQL網站:

To store values generated by INET_ATON(), use an INT UNSIGNED column rather than INT, which is signed. If you use a signed column, values corresponding to IP addresses for which the first octet is greater than 127 cannot be stored correctly. See Section 10.6, 「Out-of-Range and Overflow Handling」.

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

+2

什麼是類型提交ip? – JellyBelly

+2

它是在上面的問題;)'我的領域是無符號整數,應該適用於該條目.'因爲-259857341不超過最小值和最大值。 – Guapo

+1

int字段有多少個字節?參考:http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html – JellyBelly

回答

1

無符號整數表示至少爲非負值。

不知道這是否是你所需要的,但你可以嘗試符號整數轉換爲4個字節的無符號整數作爲ipconverter做(http://www.silisoftware.com/tools/ipconverter.php):

INSERT INTO `rooms` (`id`, `ip`) VALUES ('131213', '-259857341' & 0xffffffff); 
5

負數超出範圍爲UNSIGNED INT。閱讀documentation以獲取給定數據類型的完整允許值列表。

+0

從MySQL要存儲由INET_ATON()生成的值,請使用INT UNSIGNED列而不是經過簽名的INT。如果使用帶符號列,則與第一個字節大於127的IP地址對應的值無法正確存儲。請參見第10.6節「超出範圍和溢出處理」。 – Guapo

+3

我並不爭辯INT UNSIGNED對於存儲IP是有意義的。我只是說它不適合存儲負數。而且IP永遠不會消極。 – Flimzy

2

首先,顧名思義,你不能插入一個負數字轉換爲unsigned int字段。改爲將字段更改爲int(或者如果可能,請使用非負數)。

其次,我認爲你應該刪除插入數字周圍的單引號,該值被視爲int而不是string

0

將您的INT字段更改爲BIGINT,它對我來說會很順暢。