MySQL中使用inet_aton和inet_ntoa来处理ip地址

前言

之前在处理ip地址的时候一直是直接保存为字符串类型,最近看到另一种处理方法,原理上其实是把ip地址转为无符号整型来保存,相较于字符串保存的方式会更省空间,同时MySQL中对整型的处理也比字符串类型的要快

1.创建表`user`

mysql> CREATE TABLE `user` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(50) NOT NULL,
 `ip` int(10) unsigned NOT NULL,
 PRIMARY KEY (`id`)
) ENGINE=InnoDB;

2.使用inet_aton插入数据

mysql> INSERT INTO `user` (`id`, `name`, `ip`) VALUES
(1, 'Abby', inet_aton('192.168.1.1')),
(2, 'Daisy', inet_aton('192.168.1.2')),
(3, 'Christine', inet_aton('192.168.1.3'));
mysql> select * from user;
+----+-----------+------------+
| id | name      | ip         |
+----+-----------+------------+
| 1  | Abby      | 3232235777 |
| 2  | Daisy     | 3232235778 |
| 3  | Christine | 3232235779 |
+----+-----------+------------+

可以看到ip地址已经转为了十进制

3.使用inet_ntoa查数据

mysql> select id,name,inet_ntoa(ip) ip from user;
+----+-----------+-------------+
| id | name      | ip          |
+----+-----------+-------------+
| 1  | Abby      | 192.168.1.1 |
| 2  | Daisy     | 192.168.1.2 |
| 3  | Christine | 192.168.1.3 |
+----+-----------+-------------+

done.