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 转换为整数形式才能与数据库一起使用;在向用户展示之前,您必须将其转换为显示形式。如果您稍微搜索一下,我相信您会找到使用您使用的任何语言的预写函数,但这是一个额外的步骤。
根据您的具体情况,我认为两者都是理想选择。
在 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 转换为整数形式才能与数据库一起使用;在向用户展示之前,您必须将其转换为显示形式。如果您稍微搜索一下,我相信您会找到使用您使用的任何语言的预写函数,但这是一个额外的步骤。
根据您的具体情况,我认为两者都是理想选择。