2

当我尝试将以下内容插入我的 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。如果使用有符号列,则无法正确存储与第一个八位字节大于 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

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

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

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

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

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

于 2011-07-08T08:01:08.170 回答
1

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

于 2017-05-24T19:02:46.400 回答