站长网 百科 表示Oracle中的IPv4 / IPv6地址

表示Oracle中的IPv4 / IPv6地址

在Oracle中,代表网络地址的适当数据类型或技术是什么,哪些地址可能是IPv4或IPv6? 背景:我正在转换表记录网络活动,使用PostgreSQL inet data type构建,以在同一个表中保存v4和v6地址. 但是,没有行包含v4和v6地址. (也就是说,记录来自机器的v4堆栈或机器的

在Oracle中,代表网络地址的适当数据类型或技术是什么,哪些地址可能是IPv4或IPv6?

背景:我正在转换表记录网络活动,使用PostgreSQL inet data type构建,以在同一个表中保存v4和v6地址.

但是,没有行包含v4和v6地址. (也就是说,记录来自机器的v4堆栈或机器的v6堆栈.)

In Oracle,what is the appropriate
data type or technique for
representing network addresses,which
addresses may be IPv4 or IPv6

有两种方法:

>仅存储.
>存储常规表示

仅用于存储.一个IPV4地址应该是一个整数(32位就够了).对于IP V6,128位,INTEGER(类似于Number(38))将会做.当然,这是存储.该方法认为表示是应用程序的一个问题.

如果采取相反的策略,存储常规表示,则需要确保IP V4和IPV6地址只有一个常规(字符串)表示.它以ipV4而闻名.至于IPV6,还有一种标准格式.

我的偏好是第一个策略.在最坏的情况下,您可以采用混合方法(非酸),并将二进制和ascii表示并排存储为二进制值.

No row contains both v4 and v6
addresses,however.

IPV6格式的IPV4地址的标准表示为::: ffff:192.0.2.128.

我不知道上下文,但是我会保留2列,一个用于IPV4,另一个用于不同的ipV6地址.

更新
在@ sleepyMonad的一个很好的评论之后,我想指出,而不是Number数据类型,最好使用INTEGER数据类型,这将很乐意适应可能用128位整数’ ff … ff'(需要39位十进制数字). 38是从0到9的最大功率,范围从0到9,可以用128位编码,但仍然可以插入2 ** 128 – 1(十进制340282366920938463463374607431768211455)的最大无符号值.这是一个小的测试来说明这种可能性.

create table test (
  id integer primary key,ipv6_address_bin INTEGER );

-- Let's enter 2**128 - 1 in the nueric field
insert into test (id,ipv6_address_bin) values ( 1,to_number ( 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF','XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX') ) ;

-- retrieve it to make sure it's not "truncated".
select to_char ( ipv6_address_bin,'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX' ) from test where id = 1 ;
-- yields 'FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF'

select to_char ( ipv6_address_bin ) from test where id = 1 ;
-- yields 340282366920938463463374607431768211455

select LOG(2,ipv6_address_bin) from test where id = 1 ;
-- yields 128

select LOG(10,ipv6_address_bin) from test where id = 1 ;
-- yields > 38

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/baike/2021/0523/4914.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部