mysql inet aton ipv6_在MySQL中存储IPv6地址

要存储的格式。

使用相当复杂的IPv6 IP地址查询示例INSERT。

示例SELECT查询您将能够echo将IPv6 IP地址返回给客户端。

排除故障以确保您没有错过任何遗留代码。

醇>

我将所有列名更改为ipv6,以反映他们正确支持IPv6(这样可以保持旧列ip完好无损)。可以在ip列中存储ipv6列,然后在您确定转换有效后再点击ip列;当我真的有时间时,我会将其添加到这篇文章中。

IPv6数据类型

正如已经提到的那样VARBINARY 16是一种理想的方式,直到AMD用128位CPU祝福我们并更新数据库以支持128位整数(我说得对吗?)。 IPv6是128位,而不是64位。

CREATE TABLE `example`

(

`id` INT(11) NOT NULL AUTO_INCREMENT,

`ipv6` VARBINARY(16) NOT NULL,

PRIMARY KEY (`id`)

)

COLLATE='utf8mb4_unicode_520_ci'

ENGINE=InnoDB;

IPv6 INSERT查询

我们显然需要在SELECT之前存储IPv6 IP地址;这是PHP / SQL代码:

$ipv6 = mysqli_real_escape_string($db,'FE80:0000:0000:0000:0202:B3FF:FE1E:8329');

$query1 = "INSERT INTO example (ipv6) VALUES (INET6_ATON('$ipv6'));";

IPv6 SELECT查询

PHP / SQL代码:

$ipv6 = mysqli_real_escape_string($db,'FE80:0000:0000:0000:0202:B3FF:FE1E:8329');

$query2 = "SELECT INET6_NTOA(ipv6) AS ipv6 FROM example WHERE ipv6=INET6_ATON('$ipv6');";

这将返回fe80::202:b3ff:fe1e:8329;不,不是完整的IPv6(FE80:0000:0000:0000:0202:B3FF:FE1E:8329),它是一个浓缩/速记版本。有代码使它成为正式的完整版本,但这是为了节省自己和其他人的时间,因为这个 Q / A是一个不断出现的。

重要提示,只是因为某些 IPv6地址看起来就像他们适合bigint一样不是意味着两分钟之后,拥有更大IPv6地址的人不会停下来并造成严重破坏。

希望这可以使一些人免于打开另外两打标签的疯狂。当我将来有时间时,我会添加额外的PHP代码,将浓缩的IPv6扩展为完整的正式格式。

疑难解答强>

如果出于某种原因存储和/或检索IPv6地址对您不起作用,那么请自己获取Advanced Find and Replace的副本(在Wine中比在本地grep中更快地运行;);使用此主要来查找,而不是替换。确保您的软件中的代码一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值