2013-08-16 104 views
0
INET_ATON() 

返回一个IP地址转换的IPv4和IPv6两者成数

INET6_ATON() 

返回的IPv6地址

的数字值的数字值i有一个塔包含的IPv4 &的IPv6两者。

我尝试转换那些数字“ip_long”(列名)

我用INET_ATON,它只能转换的IPv4

我的问题是,是否INET6_ATON转换纯IPv6或两者兼而有之?

是否有任何函数可以同时转换?我有百万行数据库需要转换。

+0

INET6_ATON可用于MySQL 5.6及更高版本,以及文档http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton它也应该返回IPv4的值。要确认,请检查SELECT INET_ATON('10 .0.5.9')为ip4,INSET6_ATON('10 .0.5.9')为ip6;我无法测试它,因为我没有安装最新版本的MySQL。 – Suraj

+0

或有任何方式在PHP中做到这一点? – Ben

+0

你没有在MySQL中测试吗?我认为它应该工作。如果您对PHP感兴趣,并且您的目标是将IP转换为数字,请通过http://www.samclarke.com/2011/07/php-ipv6-to-128bit-int/。 – Suraj

回答

2

INET6_ATON()将转换ipv4和ipv6。如你所知,你需要MySQL版本5.6.x或更高版本。

该捕获只使用INET6_ATON()INET6_NTOA()。将存储转换的IP的列将是VARBINARY(16)类型。

SELECT INET6_NTOA(INET6_ATON("192.168.1.1")); 

SELECT INET6_NTOA(INET6_ATON("2001:db8::1")); 

请记住,test_table的ip列是VARBINARY(16);

+0

最近做了很多研究,这是我第一次看到应用程序应该添加一个'“:: FFFF:” '在IPv4之前。我们为什么需要这样做?不要说在doc中。http://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html#function_inet6-aton – Draven

+1

@Draven。我已经使用“:: FFFF:”将IPv4映射到IPv6,但是在必须监听IPv4和IPv6连接的应用程序中(您知道,双栈节点),但无论如何,您是对的。 MySQL在存储和正确检索到VARBINARY列的IPv4地址方面非常聪明。我会编辑我的答案。干杯! –