暗示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 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |