IP 地址数据类型

IP Address datatype

在 SQL 服务器中表示 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),
    IPAddress real,

    CONSTRAINT pk PRIMARY KEY (AId, AlertId)
)

varchar(15) 如果你只是想存储 IP 而你没有太多数据。

一个IPv4地址实际上是一个32位整数,可以转换to/from它是数字形式到显示形式。 (IPv6也是如此:它是一个128位的整数)。

如果将其存储为二进制 (4),它将占用更少 space(4 个字节而不是 15 个字节);您可以在查询中进行 IP 范围检查;在 select 语句中用作条件会更快,因为数据库不必进行字符串比较。

缺点是您需要将 IP 转换为整数形式才能与数据库一起使用;在向用户展示之前,您必须将其转换为显示形式。如果您稍微搜索一下,我相信您会找到使用您使用的任何语言的预写函数,但这是一个额外的步骤。

根据您的具体情况,我认为两者都是理想选择。