Php 使用带符号或无符号整数存储IP?
是否有必要使用无符号整数列在MySQL中存储IP(v4)地址(已使用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,它是有符号的。
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会将值剪裁到范围的适当端点,并存储结果值
带符号整数
字段中,会发生什么情况,取决于是否启用了限制模式,但在这两种情况下,它都不会像您希望的那样工作
即使未启用任何限制模式。。。
将超出范围的值分配给整数列时,MySQL存储表示列数据类型范围对应端点的值。如果将256存储到TINYINT
或TINYINT UNSIGNED
列中,MySQL将分别存储127或255
简短回答:
USIGNED
是必要的,如果您想存储第一个八位组大于127的IP
在MySQL文档中,关于:
- 如果启用了严格的SQL模式,MySQL会根据SQL标准拒绝超出范围的值,并出现错误,插入失败
- 如果未启用任何限制模式,MySQL会将值剪裁到范围的适当端点,并存储结果值
带符号整数
字段中,会发生什么情况,取决于是否启用了限制模式,但在这两种情况下,它都不会像您希望的那样工作
即使未启用任何限制模式。。。
将超出范围的值分配给整数列时,MySQL存储表示列数据类型范围对应端点的值。如果将256存储到TINYINT
或TINYINT UNSIGNED
列中,MySQL将分别存储127或255
另外,在寻求帮助时,通常不应该写“规定”。只要从别人那里得到你所需要的。写出来可能比整理评论要花更多的时间。@Devon:删除了“请”…P.S。在寻求帮助时,通常不应该写“规定”。只要从别人那里得到你所需要的。写出来可能比整理评论花费的时间更多。@Devon:删除了“请”…+1 Thx的引用!这实际上是我的问题,如果一个IP地址的第一个八位字节大于127,那么它将被存储为一个负数,但也可以工作。Thx用于澄清。1 Thx用于报价!这实际上是我的问题,如果一个IP地址的第一个八位字节大于127,那么它将被存储为一个负数,但也可以工作。用于澄清的Thx。