IP地址数据类型

问题描述

sql Server中表示IP地址的理想数据类型是什么?使用varchar(n)更好吗?

这是我数据库的一部分:

CREATE TABLE logUser 
(
    userId int primary key,userFirstName varchar(20),userLastName varchar(20),IPAddress real,city varchar(15),salary real 
)

CREATE TABLE Alert 
(
    AlertId varchar(10) primary key,alType varchar(20),aluserId int references logUser(userId)
)

CREATE TABLE GeoAnalytics
(
    AId int,--Analytics ID     
    AlertId varchar(10) references Alert(AlertId),Country varchar (20),City varchar(30),CONSTRAINT pk PRIMARY KEY (AId,AlertId)
)

解决方法

varchar(15),如果您只想存储IP并且没有太多数据。

IPv4地址实际上是一个32位整数,可以将其转换为数字形式或从其数字形式转换为显示形式。 (IPv6也是如此:它是一个128位整数)。

如果将其存储为binary(4),它将占用更少的空间(4个字节而不是15个字节);您可以在查询中进行IP范围检查;而且由于DB不必进行字符串比较,因此在select语句中用作条件会更快。

缺点是您需要将IP转换为整数形式才能与DB一起使用;并且您必须先将其转换为它的显示形式,然后才能显示给用户。如果您稍作搜索,我相信您会找到所使用的任何语言的预写函数,但这是一个额外的步骤。

根据您的情况,我认为这两种方法都是理想的。