ip数据库 mysql-mysql ip地址库
为什么问如何存储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次方