可能重复:
IPv6地址的文本表示的最大长度?
作为存储客户端IP地址的数据库列的最大大小,您会建议什么?我现在把它设置为16,但是我可以获得比IPv6更长的IP地址吗?
在MySQL中存储和检索IP地址的最有效方法是什么?现在我正在做:
SELECT * FROM logins WHERE ip = '1.2.3.4'
ip是一个VARCHAR(15)字段.
有一个更好的方法吗?
在SQL Server中存储IPv4地址的最佳推荐数据类型是什么?
或者有人已经为它创建了用户SQL数据类型(.Net程序集)?
我不需要排序.
在IPv4我已经解析IP地址的字符串表示Int32并将其存储INT在SQL Server.
现在,IPv6我试图找出是否有对的字符串表示解析标准或接受的方式IPv6在两个Int64使用C#?
人们如何将这些价值存储在SQL Server- 作为两个领域BIGINT?
问题陈述:
给定一系列
x -> y无符号整数
,其中x和y都在范围内 ,并且(或者在交替情况下为64) 找到最小可用值 不等于或 不在现有集合中 ,其中现有集合是任意子集0 -> 2nn0 -> 32xyx -> y
我正在使用数据库中的IPv4和IPv6子网建模.每个子网由其起始地址和结束地址定义(我通过业务规则确保范围的完整性).由于IPv6太大而无法存储在bigint数据类型中,因此我们将IP地址存储为binary(4)或binary(16).
相关联的数据被存储在subnet,dhcp_range与ip_address表:
subnet表中.子网范围始终为2 n(根据CIDR /网络掩码的定义).0..*存储在ip_address表中的IP地址.IP地址必须位于起始地址和结束地址之间,但不等于其关联子网定义的范围.0..*存储在dhcp_range表中的DHCP范围.与子网类似,每个DHCP范围定义开始和结束地址.DHCP范围受相关子网范围的限制.DHCP范围不会相互重叠.我想要确定的是子网的下一个可用IP:
我正在寻找一个解决方案,找到最小可用地址或所有可用地址.
我最初的想法是生成由子网范围绑定的可能地址(数字)范围,然后根据使用的集删除地址:
declare @subnet_sk int = 42
;with …我正在学习C#,对于网络扫描项目,我想将IP地址保存为我的SQL Server的二进制文件,因为这似乎是"最佳"解决方案.
但由于我很新,我对如何告诉EF6这样做非常困惑.
我想IPAddress在我的代码中使用变量类型,但EF会将其保存为BIGINT我的数据库(使用代码优先).
我想我可以使它成为一个byte []并使用getter和setter来将二进制转换为该IPAddress类型?
或者我可以告诉它使用BINARY数据注释吗?我还需要手动进行转换吗?
有人可以为我澄清一下吗?
因为我会将大量IP保存到数据库中,所以我希望以尽可能最好的方式保存它们.
非常感谢!
c# sql-server entity-framework code-first entity-framework-6
我知道关于这个话题已经有很多问题,但我可能会有一些额外的问题.
我想将IP地址存储在数据库中(如果可能,单列).我希望能够存储IPv4或IPv6地址.我希望能够在检索时区分IPv4和IPv6地址.
我考虑过的方法:
使用VARCHAR(45)以文本格式存储IP地址.IPv4地址的文本表示的最大长度为15个字符.IPv6地址的文本表示的最大长度是39个字符,虽然我读到当他们代理IPv4地址时它们实际上可以达到45个(不是我熟悉的东西所以我可能在这里) -某些软件中的头文件似乎反映了这一点,将46指定为IPv6地址的最大长度(45 +\0).格式之间的区别是微不足道的.
将IP地址存储在两个bigint列中.这比文本格式使用更少的空间.格式之间的区别 - 如果第一列是0或NULL(虽然性能不好),它是IPv4地址,否则是IPv6?
将IP地址存储在uniqueidentifier列中.128位,可以以最紧凑的方式存储两种地址格式(我们在IPv4地址上浪费了96位,但无论我们做什么,这都是不可避免的).这种方式似乎是最可取的,但是给定任何128位整数,是否可以知道该128位整数是代表IPv4还是IPv6地址?
如果IPv4和IPv6地址之间的区别可以表示为单个128位整数,我宁愿使用第三种方法来禁止该解决方案的任何主要问题.我想我的主要问题是这是否可能,但听到任何关于不同方法(包括我未在此列出的方法)的优点和缺点的想法也会有所帮助.
另外......如果有必要,将第三种方法(区分IPv4和IPv6)添加一个位列是一个好主意吗?有点列实际上是1位,还是8?
我们最近开始使用 MaxMind Geolite Database 作为基于 IP 的城市查找。有很多关于将数据导入 SQL Server 的说明(我已经完成了)。现在我需要弄清楚如何在子网中搜索给定的 IP。
数据库架构:
CREATE TABLE GeoIP (   
    network varchar(20) not null,
    geoname_id varchar(20) not null,
    registered_country_geoname_id varchar(20) not null,
    represented_country_geoname_id varchar(20) not null,
    is_anonymous_proxy int,
    is_satellite_provider int,
    postal_code varchar(20),
    latitude Decimal(9,6),
    longitude Decimal(9,6),
    accuracy_radius int
); 
“网络”列包含带有 IP/子网的行数据(例如:1.0.32.0/19、1.0.64.0/20、1.0.80.0/22)
给定一个 IP 地址,我正在尝试编写一个将返回 geoname_id 的 SELECT 语句。
Ex: SELECT geoname_id FROM GeoIP where @user_ip in {some expression}
我想这样做而不必将网络列分解为“low_ip”和“high_ip”BIGINT 列。但是,如果这是唯一的方法,我还可以使用有关如何编写全局 UPDATE 语句以从现有数据添加这些列的一些帮助。
SQL SERVER 2008 需要这个,所以不能使用任何很酷的 Postgres 等功能。
谢谢!!
sql-server ×5
sql ×4
ip-address ×3
c# ×2
algorithm ×1
code-first ×1
database ×1
ipv4 ×1
ipv6 ×1
math ×1
mysql ×1
range ×1
types ×1