首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL数据库(IPv4和IPv6)中存储IP地址

问在MySQL数据库(IPv4和IPv6)中存储IP地址
EN

Stack Overflow用户
提问于 2012-05-15 03:34:03
回答 5查看 18.8K关注 0票数 10

好了,现在我意识到类似的问题可能已经被问了一百万次了,但我在这方面是一个真正的新手,我真的很感谢你在这里的帮助。

基本上,我想将访问者的IP地址存储在一个MySQL中,以便以后检索和验证。我首先需要知道我需要使用什么类型的字段来存储IP地址。如果可能的话,我还想使系统与IPv6地址兼容。

提前感谢

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-05-15 03:42:51

要存储IPv4,您可以使用INT UNSIGNED,而对于IPv6,您需要decimal(39,0),将ip存储在表中,您可以使用函数INET_ATON

代码语言:javascript
复制
INSERT INTO table (ipcol) VALUES (INET_ATON('192.168.0.10'));

并使用函数INET_NTOA将其检索回来

代码语言:javascript
复制
SELECT INET_NTOA(ipcol) AS ip FROM table;

这回答了MySQL IPv6支持之前存在的问题;用户应该知道,MySQL现在本机支持IPv6: https://dev.mysql.com/doc/refman/5.6/en/miscellaneous-functions.html

票数 12
EN

Stack Overflow用户

发布于 2012-05-15 03:40:08

我使用VARBINARY(16)作为数据类型,并使用MySQL函数INET_ATON()插入IP号(稍后我使用反向函数INET_NTOA()读取IP号。

票数 6
EN

Stack Overflow用户

发布于 2012-05-15 03:38:24

MySQL中没有足够大的整型来存储IPv6地址。最紧凑的存储方式是像BINARY(16)这样的东西。如果您只需要存储和检索地址,而不需要对它们执行逻辑操作(例如,查询哪些IP地址属于覆盖前缀的网络掩码操作),那么这就足够了。如果需要执行逻辑或位操作,则需要更花哨一些:需要将IPv6地址存储在两个单独的64位整数列中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10589887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档