当我尝试将下面的内容插入我的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
答案 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,它将顺利为我服务。