Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用带符号或无符号整数存储IP?_Php_Mysql_Ip_Unsigned_Signed - Fatal编程技术网

Php 使用带符号或无符号整数存储IP?

Php 使用带符号或无符号整数存储IP?,php,mysql,ip,unsigned,signed,Php,Mysql,Ip,Unsigned,Signed,是否有必要使用无符号整数列在MySQL中存储IP(v4)地址(已使用INET\u ATON转换) 我认为这真的无关紧要,因为无论字段是如何定义的,都将使用相同的数据将其转换回INET\u NTOA。 因此,唯一的区别是,在一种情况下,您在db中看到一个负数,而使用unsigned时,您会看到一个(完全)不同的正数,而在这两种情况下,实际数据是相同的,只是表示形式在字段定义中有所不同,对吗?来自: 要存储INET_ATON()生成的值,请使用INT UNSIGNED列 而不是INT,它是有符号的。

是否有必要使用无符号整数列在MySQL中存储IP(v4)地址(已使用
INET\u ATON
转换)

我认为这真的无关紧要,因为无论字段是如何定义的,都将使用相同的数据将其转换回
INET\u NTOA
。 因此,唯一的区别是,在一种情况下,您在db中看到一个负数,而使用unsigned时,您会看到一个(完全)不同的正数,而在这两种情况下,实际数据是相同的,只是表示形式在字段定义中有所不同,对吗?

来自:

要存储INET_ATON()生成的值,请使用INT UNSIGNED列 而不是INT,它是有符号的。如果使用带符号的列,则值 对应于第一个八位字节大于的IP地址 无法正确存储127以上的数据。看

为什么不使用一个未签名的文件来保证兼容性呢?在您的场景中使用unsigned有哪些缺点会让您对此产生疑问?

来自:

要存储INET_ATON()生成的值,请使用INT UNSIGNED列 而不是INT,它是有符号的。如果使用带符号的列,则值 对应于第一个八位字节大于的IP地址 无法正确存储127以上的数据。看


为什么不使用一个未签名的文件来保证兼容性呢?在您的场景中使用unsigned有哪些缺点会让您对此产生疑问?

简短回答:
如果要存储第一个八位字节大于127的IP,则必须使用unsigned

在MySQL文档中,关于:

  • 如果启用了严格的SQL模式,MySQL会根据SQL标准拒绝超出范围的值,并出现错误,插入失败

  • 如果未启用任何限制模式,MySQL会将值剪裁到范围的适当端点,并存储结果值

因此,如果您试图将大于127.255.255.255的IP地址存储在
带符号整数
字段中,会发生什么情况,取决于是否启用了限制模式,但在这两种情况下,它都不会像您希望的那样工作

即使未启用任何限制模式。。。 将超出范围的值分配给整数列时,MySQL存储表示列数据类型范围对应端点的值。如果将256存储到
TINYINT
TINYINT UNSIGNED
列中,MySQL将分别存储127或255


简短回答:
USIGNED
是必要的,如果您想存储第一个八位组大于127的IP

在MySQL文档中,关于:

  • 如果启用了严格的SQL模式,MySQL会根据SQL标准拒绝超出范围的值,并出现错误,插入失败

  • 如果未启用任何限制模式,MySQL会将值剪裁到范围的适当端点,并存储结果值

因此,如果您试图将大于127.255.255.255的IP地址存储在
带符号整数
字段中,会发生什么情况,取决于是否启用了限制模式,但在这两种情况下,它都不会像您希望的那样工作

即使未启用任何限制模式。。。 将超出范围的值分配给整数列时,MySQL存储表示列数据类型范围对应端点的值。如果将256存储到
TINYINT
TINYINT UNSIGNED
列中,MySQL将分别存储127或255


另外,在寻求帮助时,通常不应该写“规定”。只要从别人那里得到你所需要的。写出来可能比整理评论要花更多的时间。@Devon:删除了“请”…P.S。在寻求帮助时,通常不应该写“规定”。只要从别人那里得到你所需要的。写出来可能比整理评论花费的时间更多。@Devon:删除了“请”…+1 Thx的引用!这实际上是我的问题,如果一个IP地址的第一个八位字节大于127,那么它将被存储为一个负数,但也可以工作。Thx用于澄清。1 Thx用于报价!这实际上是我的问题,如果一个IP地址的第一个八位字节大于127,那么它将被存储为一个负数,但也可以工作。用于澄清的Thx。