#1264超出范围值修复?

时间:2011-07-08 07:52:46

标签: mysql int outofrangeexception mysql-error-1264

当我尝试将下面的内容插入我的MySQL

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

我因以下错误而失败:

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

我环顾四周但尚未找到如何解决或解决问题......

我的字段是unsigned int ,对于该条目应该可以正常工作。

问题是什么?如何解决?

我正在使用unsigned int,因为我想使用inet_ntoa / aton存储ips。

编辑:

我在MySQL网站上推荐使用unsigned INT:

  

存储由...生成的值   INET_ATON(),使用INT UNSIGNED   列而不是INT,这是   签。如果您使用签名列,   与IP地址对应的值   第一个八位字节更大   超过127无法正确存储。   请参见第10.6节“超出范围和   溢出处理“。

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

4 个答案:

答案 0 :(得分:5)

UNSIGNED INT的负数超出范围。请阅读documentation以获取给定数据类型的允许值的完整列表。

答案 1 :(得分:2)

首先,根据定义,您不能在unsigned int字段中插入负数。将字段更改为int(或者如果可能,请使用非负数)。

其次我认为您应该删除插入数字周围的单引号,以便将该值视为int而不是string

答案 2 :(得分:1)

无符号整数至少表示非负值。

不确定这是否是您所需要的,但您可以尝试将有符号整数转换为4字节无符号整数,如ipconverter所做的那样(http://www.silisoftware.com/tools/ipconverter.php):

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

答案 3 :(得分:0)

将您的INT字段更改为BIGINT,它将顺利为我服务。