表示Oracle中的IPv4 / IPv6地址
在Oracle中,代表网络地址的适当数据类型或技术是什么,哪些地址可能是IPv4或IPv6? 背景:我正在转换表记录网络活动,使用PostgreSQL 但是,没有行包含v4和v6地址. (也就是说,记录来自机器的v4堆栈或机器的v6堆栈.)
有两种方法: >仅存储. 仅用于存储.一个IPV4地址应该是一个整数(32位就够了).对于IP V6,128位,INTEGER(类似于Number(38))将会做.当然,这是存储.该方法认为表示是应用程序的一个问题. 如果采取相反的策略,存储常规表示,则需要确保IP V4和IPV6地址只有一个常规(字符串)表示.它以ipV4而闻名.至于IPV6,还有一种标准格式. 我的偏好是第一个策略.在最坏的情况下,您可以采用混合方法(非酸),并将二进制和ascii表示并排存储为二进制值.
IPV6格式的IPV4地址的标准表示为::: ffff:192.0.2.128. 我不知道上下文,但是我会保留2列,一个用于IPV4,另一个用于不同的ipV6地址. 更新 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 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |