W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
inet
cidr
inet
vs. cidr
macaddr
macaddr8
PostgreSQL提供用于存儲 IPv4、IPv6 和 MAC 地址的數據類型,如表 8.21所示。 用這些數據類型存儲網絡地址比用純文本類型好,因為這些類型提供輸入錯誤檢查以及特殊的操作符和函數(見第 9.12 節(jié))
表 8.21. 網絡地址類型
名字 | 存儲尺寸 | 描述 |
---|---|---|
cidr | 7或19字節(jié) | IPv4和IPv6網絡 |
inet | 7或19字節(jié) | IPv4和IPv6主機以及網絡 |
macaddr | 6字節(jié) | MAC地址 |
macaddr8 | 8 bytes | MAC地址(EUI-64格式) |
在對inet
或者cidr
數據類型進行排序的時候, IPv4 地址將總是排在 IPv6 地址前面,包括那些封裝或者是映射在 IPv6 地址里 的 IPv4 地址,例如 ::10.2.3.4 或者 ::ffff::10.4.3.2。
inet
inet
在一個數據域里保存一個 IPv4 或 IPv6 主機地址,以及一個可選的它的子網。 子網由主機地址中表示的網絡地址位數表示(“網絡掩碼”)。 如果網絡掩碼為 32 并且地址是 IPv4 ,那么該值不表示任何子網,只是一臺主機。在 IPv6 中地址長度是 128 位,因此 128 位指定一個唯一的主機地址。 請注意如果你想只接受網絡地址,你應該使用cidr
類型而不是inet
。
該類型的輸入格式是地址/y
,其中地址
是一個 IPv4 或者 IPv6 地址,y
是網絡掩碼的位數。
如果/y
部分省略, 則網絡掩碼對 IPv4 取為 32,對 IPv6 取為 128,所以該值表示只有一臺主機。在顯示時,如果/y
部分指定一個單臺主機,它將不會被顯示出來。
cidr
cidr
類型保存一個 IPv4 或 IPv6 網絡地址聲明。其輸入和輸出遵循無類的互聯(lián)網域路由(Classless Internet Domain Routing)習慣。
聲明一個網絡的格式是地址/y
,其中address
是最低位地址,表現為 IPv4 或 IPv6 網絡地址而y
是網絡掩碼的位數。
如果省略y
, 那么掩碼部分用舊的有類的網絡編號系統(tǒng)進行計算,否則它將至少大到足以包括寫在輸入中的所有字節(jié)。
聲明一個在其指定的掩碼右邊置了位的網絡地址會導致錯誤。
表 8.22展示了一些例子。
表 8.22. cidr
類型輸入例子
cidr 輸入 | cidr 輸出 |
|
---|---|---|
192.168.100.128/25 | 192.168.100.128/25 | 192.168.100.128/25 |
192.168/24 | 192.168.0.0/24 | 192.168.0/24 |
192.168/25 | 192.168.0.0/25 | 192.168.0.0/25 |
192.168.1 | 192.168.1.0/24 | 192.168.1/24 |
192.168 | 192.168.0.0/24 | 192.168.0/24 |
128.1 | 128.1.0.0/16 | 128.1/16 |
128 | 128.0.0.0/16 | 128.0/16 |
128.1.2 | 128.1.2.0/24 | 128.1.2/24 |
10.1.2 | 10.1.2.0/24 | 10.1.2/24 |
10.1 | 10.1.0.0/16 | 10.1/16 |
10 | 10.0.0.0/8 | 10/8 |
10.1.2.3/32 | 10.1.2.3/32 | 10.1.2.3/32 |
2001:4f8:3:ba::/64 | 2001:4f8:3:ba::/64 | 2001:4f8:3:ba/64 |
2001:4f8:3:ba:?2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:?2e0:81ff:fe22:d1f1/128 | 2001:4f8:3:ba:?2e0:81ff:fe22:d1f1/128 |
::ffff:1.2.3.0/120 | ::ffff:1.2.3.0/120 | ::ffff:1.2.3/120 |
::ffff:1.2.3.0/128 | ::ffff:1.2.3.0/128 | ::ffff:1.2.3.0/128 |
inet
vs. cidr
inet
和cidr
類型之間的本質區(qū)別是inet
接受右邊有非零位的網絡掩碼, 而cidr
不接受。例如,192.168.0.1/24
對inet
是有效的,但對cidr
是無效的。
如果你不喜歡inet
或cidr
值的輸出格式,可以嘗試函數host
、text
和abbrev
。
macaddr
macaddr
類型存儲 MAC 地址,也就是以太網卡硬件地址 (盡管 MAC 地址還用于其它用途)??梢越邮芟铝懈袷降妮斎耄?
'08:00:2b:01:02:03' |
'08-00-2b-01-02-03' |
'08002b:010203' |
'08002b-010203' |
'0800.2b01.0203' |
'0800-2b01-0203' |
'08002b010203' |
這些例子指定的都是同一個地址。對于位a
到f
,大小寫都可以接受。輸出總是使用展示的第一種形式。
IEEE Std 802-2001 指定第二種展示的形式(帶有連字符)作為MAC地址的標準形式,并且指定第一種形式(帶有分號)作為位翻轉的記號,因此 08-00-2b-01-02-03 = 01:00:4D:08:04:0C。這種習慣目前已經被廣泛地忽略,并且它只與廢棄的網絡協(xié)議(如令牌環(huán))相關。PostgreSQL 沒有對位翻轉做任何規(guī)定,并且所有可接受的格式都使用標準的LSB順序。
剩下的五種輸入格式不屬于任何標準。
macaddr8
macaddr8
類型以EUI-64格式存儲MAC地址,例如以太網卡的硬件地址(盡管MAC地址也被用于其他目的)。這種類型可以接受6字節(jié)和8字節(jié)長度的MAC地址,并且將它們存儲為8字節(jié)長度的格式。以6字節(jié)格式給出的MAC地址被存儲為8字節(jié)長度格式的方式是吧第4和第5字節(jié)分別設置為FF和FE。
注意IPv6使用一種修改過的EUI-64格式,其中從EUI-48轉換過來后的第7位應該被設置為一。函數macaddr8_set7bit
被用來做這種修改。
一般而言,任何由16進制數(字節(jié)邊界上)對構成的輸入(可以由':'
、'-'
或者'.'
統(tǒng)一地分隔)都會被接受。16進制數的數量必須是16(8字節(jié))或者12(6字節(jié))。前導和拖尾的空格會被忽略。
下面是可以被接受的輸入格式的例子:
'08:00:2b:01:02:03:04:05' |
'08-00-2b-01-02-03-04-05' |
'08002b:0102030405' |
'08002b-0102030405' |
'0800.2b01.0203.0405' |
'0800-2b01-0203-0405' |
'08002b01:02030405' |
'08002b0102030405' |
這些例子都指定相同的地址。數字a
到f
的大小寫形式都被接受。輸出總是以上面顯示的第一種形式。
上述的后六種輸入格式不屬于任何標準。
要把EUI-48格式的傳統(tǒng)48位MAC地址轉換成修改版EUI-64格式(包括在IPv6地址中作為主機部分),可以使用下面的macaddr8_set7bit
:
SELECT macaddr8_set7bit('08:00:2b:01:02:03');
macaddr8_set7bit
-------------------------
0a:00:2b:ff:fe:01:02:03
(1 row)
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: