mysql ipv6转整型_MySQL 数据库将IP地址转换为整型数字存储到数据表中效果更好 | IT工程师的生活足迹...

在数据库中存储IP地址,应该怎么存储?

如果使用字符串方式存储的话,查询效率和存储空间使用都不理想。

使用无符号整型(unsigned int(10))来存储会更好,并且MySQL服务器提供了IP地址和整型转换的函数。

一、IP地址转为整型数字

将IP地址转换计算为整型数字的函数为inet_aton()函数。

mysql> select inet_aton('255.255.255.255');

+------------------------------+

| inet_aton('255.255.255.255') |

+------------------------------+

| 4294967295 |

+------------------------------+

1 row in set (0.00 sec)

所以IP的表字段设置为INT(10)即可,如果IP获取不到可以直接存0代表获取不到IP的意思

二、整型数字还原为IP地址

将整型数字还原为IP地址的函数为inet_ntoa()函数。

mysql> select inet_ntoa(4294967295);

+-----------------------+

| inet_ntoa(4294967295) |

+-----------------------+

| 255.255.255.255 |

+-----------------------+

1 row in set (0.00 sec)

注意,0转换为 0.0.0.0

三、创建数据表示例

示例:创建一个用于存储用户登录系统的数据表。表结构包括用户ID,登录的IP地址和登录的时间。

create table login_log(

userid int unsigned,

login_ip int unsigned,

login_time timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

);

你可能感兴趣的:(mysql,ipv6转整型)