当前位置: 主页 > 数据库

ip数据库 mysql-mysql ip地址库

发布时间:2023-02-09 09:16   浏览次数:次   作者:佚名

为什么问如何存储IP

首先澄清一些人的反问:为什么问怎么保存IPip数据库 mysql,就不能用varchar类型吗?

事实上,任何程序设计都必须在功能实现的基础上最大程度地优化性能。 而数据库设计是程序设计中不可忽视的重要组成部分ip数据库 mysql,巧妙地存储IP地址可以在一定程度上得到很大的提高。

使用函数算法进行处理

MySQL中没有直接提供IP类型字段,但是如果有两个函数可以将IP与最大长度为10位的类型相互转换,使用int类型存储IP的性能要比varchar好很多类型以存储 IP 地址。 空间。 因为varchar是变长形式,所以需要多一个字节来存储长度。 另外,int类型在逻辑运算上比varchar快。

IP转数字函数inet_aton()

我们转换下几个常用的IP地址

01

mysql>selectinet_aton('255.255.255.255');

02

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

03

|  inet_aton('255.255.255.255') |

04

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

05

|  4294967295 |

06

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

07

1 行插入(0.00 秒)

08

09

mysql>selectinet_aton('192.168.1.1');

10

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

11

|  inet_aton('192.168.1.1') |

12

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

13

|  3232235777 |

14

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

15

1 行插入(0.00 秒)

16

17

mysql>selectinet_aton('10.10.10.10');

18

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

19

|  inet_aton('10.10.10.10') |

20

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

21

|  168430090 |

22

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

23

1 行插入(0.00 秒)

因此,IP表字段可以设置为INT(10)。 如果获取不到IP,可以直接存0表示获取不到IP。

数字到 IP 函数 inet_ntoa()

01

mysql>selectinet_ntoa(4294967295);

02

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

03

|  inet_ntoa(4294967295) |

04

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

05

|  255.255.255.255 |

06

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

07

1 行插入(0.00 秒)

08

09

mysql>selectinet_ntoa(3232235777);

10

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

11

|  inet_ntoa(3232235777) |

12

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

13

|  192.168.1.1 |

14

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

15

1 行插入(0.00 秒)

16

17

mysql>selectinet_ntoa(168430090);

18

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

19

|  inet_ntoa(168430090) |

20

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

21

|  10.10.10.10 |

22

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

23

1 行插入(0.00 秒)

24

25

mysql>selectinet_ntoa(0);

26

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

27

|  inet_ntoa(0) |

28

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

29

|0.0.0.0|

30

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

31

1 行插入(0.00 秒)

注意 0 被转换为 0.0.0.0

整型字段的比较比字符串要高效得多,这也符合一个优化原则:使用最适合(最小)和最简单的数据类型来定义字段类型。

inet_aton()算法其实是借用了各国IP地址国际区分中使用的ip号。

abcd的ip号为:

a * 256的3次方 + b * 256的2次方 + c * 256的1次方 + d * 256的0次方