IP地址在数据库里面的存储方式
来源:互联网 发布:彭博商业周刊 知乎 编辑:程序博客网 时间:2024/05/18 11:26
IP地址在数据库里面的存储方式
大多数公司的表结构都需要经过DBA进行审核,有时候你会看到存储IP地址采用varchar(15),这种方式都是传统的做法,这种方法需要占用15个字节,那么有更省空间的做法么?肯定是有的,那就是用int存储。如果采用int存储这里又有2种处理方式。
1. 利用MySQL函数进行处理。可以采用INET_ATON,INET_NTOA函数进行转换。
2. 利用开发语言的函数进行处理,以php进行举例。可以采用ip2long,long2ip函数进行转换。
上面2种方法得到的结果都是一致的。因为算法都是一样的。
下面进行函数用法的演示。首先看看用MySQL自己的函数如何玩。先把ip地址转换int。
mysql> SELECT INET_ATON('192.168.0.1');+--------------------------+| INET_ATON('192.168.0.1') |+--------------------------+| 3232235521 |+--------------------------+1 row in set (0.00 sec)mysql>
然后把int类型转换为ip地址:
mysql> SELECT INET_NTOA(3232235521); +-----------------------+| INET_NTOA(3232235521) |+-----------------------+| 192.168.0.1 |+-----------------------+1 row in set (0.00 sec)mysql>
下面看php函数的使用:
<?phpecho ip2long('192.168.0.1');?>
php test.php 3232235521
可以看到结果是一样的,如果要把整形转换为ip地址,再使用php的long2ip()就行,这里就不再写了。
MySQL存储这个值是字段需要用int UNSIGNED。不用UNSIGNED的话,128以上的IP段就存储不了。当然可以使用bigint,但是请记住,能抠门就要抠门。省一点是一点,哈哈。
PHP存入时:$ip = ip2long($ip);
MySQLl取出时:SELECT INET_ATON(ip) FROM table ...
PHP取出时,多一步:$ip = long2ip($ip);
那么以前就是varchar类型,那么如何转换呢?下面慢慢道来。
1. 把以前的varchar()数据转换为int型的SQL语句如下。
UPDATE t1 SET ip = INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL ;
mysql> select * from t1;+------+-------------+| id | ip |+------+-------------+| 1 | 192.168.0.1 || 2 | 192.168.0.2 |+------+-------------+2 rows in set (0.00 sec)mysql> UPDATE t1 SET ip = INET_ATON(ip) WHERE INET_ATON(ip) is NOT NULL ; Query OK, 2 rows affected (0.00 sec)Rows matched: 2 Changed: 2 Warnings: 0mysql> select * from t1;+------+------------+| id | ip |+------+------------+| 1 | 3232235521 || 2 | 3232235522 |+------+------------+2 rows in set (0.00 sec)
2. 把字段改为INT类型。
mysql> show create table t1\G*************************** 1. row *************************** Table: t1Create Table: CREATE TABLE `t1` ( `id` int(11) DEFAULT NULL, `ip` varchar(15) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf81 row in set (0.00 sec)
ALTER TABLE `t1` modify ip INT UNSIGNED NOT NULL;
3. 程序代码改动。
总结:
字段类型用合适的,够用就行,能省则省,在数据量上去以后,10个字节和5个字节相差的数据量会让你吃惊。
原文:http://www.cnblogs.com/gomysql/p/4595621.html
- IP地址在数据库里面的存储方式
- IP地址在数据库中的存储方式
- 关于IP地址在数据库的存储格式
- PHP操作IP地址在mysql中的存储方式
- PHP操作IP地址在mysql中的存储方式
- IP地址在mysql的存储(IP地址和int的转换)
- 在命令行的方式下修改IP地址,网关
- 将IP以整型的方式存储到数据库中
- 将IP以整型的方式存储到数据库中
- 将IP以整型的方式存储到数据库中
- MYSQL数据库中IP地址存储优化
- IP地址的存储形式
- IP在数据库中存储
- 在mysql中存储ip地址
- 论IP地址在数据库中应该用何种形式存储
- 论IP地址在数据库中应该用何种形式存储
- 论IP地址在数据库中应该用何种形式存储
- ElasticSearch里面关于日期的存储方式
- win8.1中Xshell输入中文显示问号问题
- 非静态内部类创建静态实例造成的内存泄漏
- web 信息搜索之指纹识别篇
- 代码实现(一): 用Python抓取指定页面
- 异或定理
- IP地址在数据库里面的存储方式
- .NET MVC在中控制器返回的bool类型数据的使用
- 进程异常退出 EIO input/output error
- 舵机工作原理及程序
- 好心分手
- 创建并部署自签名的 SSL 证书到 Nginx
- Java验证身份证是否合法
- Git 常用操作(十一) vim 简单操作
- 约瑟夫环问题