数据库中怎么存储IP地址

发布网友 发布时间:2022-04-22 01:06

我来回答

5个回答

懂视网 时间:2022-04-30 04:25

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函数的使用:

<?php
echo 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: 0

mysql> select * from t1;
+------+------------+
| id | ip  |
+------+------------+
| 1 | 3232235521 |
| 2 | 3232235522 |
+------+------------+
2 rows in set (0.00 sec)

2. 把字段改为INT类型。

mysql> show create table t1G
*************************** 1. row ***************************
 Table: t1
Create Table: CREATE TABLE `t1` (
 `id` int(11) DEFAULT NULL,
 `ip` varchar(15) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
ALTER TABLE `t1` modify ip INT UNSIGNED NOT NULL;

3. 程序代码改动。

 

总结:

字段类型用合适的,够用就行,能省则省,在数据量上去以后,10个字节和5个字节相差的数据量会让你吃惊。

 


                              

IP地址在数据库里面的存储方式

标签:

热心网友 时间:2022-04-30 01:33

楼上的比较复杂了,直接用text文本,设定最多15字符就可以了。
比如asp,首先取得用户的ip,如
<%
dim uip
uip=Request.ServerVariables("REMOTE_ADDR")
%>
其次,存到数据库某字段,如
<%
'数据库连接,这个看你自己的数据库链接了,不再详述
rs.addnew
rs("ip的字段")=uip '添加到数据库
rs.update '更新内容,保存
%>

还有问题?Q我

热心网友 时间:2022-04-30 02:51

规则用“.”把ip分成4个数字 a1,a2,a3,a4 然后把 a1*256*256*256+a2*256*256+a3*256+a4存入数据库

//存入数据库
public long StrToFlo(string str)
{
char[] sp ={ '.' };
string[] a = str.Split(sp);
long b = 0;
int ii = 256;
for (int i = 0, n = a.Length - 1; i <= a.Length - 1; i++, n--)
b += (long)(Convert.ToInt32(a[i]) * Math.Pow(ii, n));
return b;
}

// 读出后转换为ip

public string FloToString(long flo)
{
string sp = "";
string b = "";
int i = 256;
for (int n = 3; n >= 0; n--)
{
b += (sp + Convert.ToString(flo/(long)Math.Pow(i, n)));
flo %= (long)Math.Pow(i, n);
sp = ".";
}
return b;
}

热心网友 时间:2022-04-30 04:26

access中记录用户ip的方法:
'获取访问者的IP
ip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
set rs=server.CreateObject("adodb.recordset")
sql = "select * from xiaoyewl_yzm where yzip='"&ip&"' and DATEDIFF('d',now(),sj)=0" '先查询数据库里有没有
rs.open sql,conn,3,2
if rs.eof or rs.bof then '数据库无当天IP则写入
rs.addnew

now_time = now '获取登陆时间(服务器时间)
rs("yzip") = ""&ip&""
rs("yzcs") = 1
rs("sj") = now_time
rs.update
end if
rs.close

热心网友 时间:2022-04-30 06:17

数据库可以直接存IP呀。。Access不知道不过我用MYSQL都是直接存里面的。。
。。不能直接存就改下格式然后拿到页面来再还原!

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com