データベース - データ型 - inet ネットワークアドレス型


クラウディア 


1. 概要
2. 解説
3. MySQL
4. 参考サイト

1. 概要

 「inet」型は、IPアドレス(IPv4およびIPv6)を格納するためのデータ型です。  「PostgreSQL」でしか使ったことがない、特殊なデータ型です。  「MySQL」には、調べた限り、ありません。  「Oracle」「IBM DB2」などの他のデータベースには、あるかないかようわかりません。

2. 解説

 実際には、ネットワークアドレス型というのは、「cidr」「inet」「macaddr」とありまして、それぞれ以下のように定義されています。  以下、ほぼ、公式ドキュメントからの引用です。
名前 格納サイズ 説  明 備考
cidr 7もしくは19バイト IPv4、およびIPv6ネットワーク
inet 7もしくは19バイト IPv4もしくはIPv6ホスト、およびネットワーク
macaddr 6バイト MACアドレス

 「cidr」の入出力が例示されておりまして、下記のように記されております。

cidr 入力 cidr出力 abbrev(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
::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 データ型と cidr データ型との基本的な相違は、inet ではネットマスクの右側に 0 でないビット値を受け付けますが、cidr では受け付けないことです。」とありまして。
 さらにおまけで、「もし「inet」もしくは「cidr」の値の出力書式が気に入らないのであれば、関数「host」、「text」および「abbrev」を試してください。」と「tips」がついております。

3. MySQL

 「MySQL」には、「inet」型はないのですが、「ChatGPT」軍曹に相談したら。  「IPv4」であれば「INT UNSIGNED」型と「INET_ATON()」「INET_NTOA()」関数を利用して、疑似的なことができます。  下記のようにテーブルを作成して。

CREATE TABLE table_name
(
  id SERIAL NOT NULL
  , name TEXT NOT NULL
  , address INT UNSIGNED NOT NULL
  , PRIMARY KEY (id)
);
 「INSERT」します。

INSERT INTO table_name(name, address) VALUES ('wifi01', INET_ATON('192.168.10.1'));

SELECT id, name, INET_NTOA(address) FROM table_name;
 の結果は。

+----+--------+------------+
| id | name   | address    |
+----+--------+------------+
|  1 | wifi01 | 3232238081 |
+----+--------+------------+
 ですが。  「INET_NTOA()」を使えば。

SELECT id, name, INET_NTOA(address) FROM table_name;

+----+--------+--------------------+
| id | name   | INET_NTOA(address) |
+----+--------+--------------------+
|  1 | wifi01 | 192.168.10.1       |
+----+--------+--------------------+
 になります。  「IPv6」だと、「BINARY(16)」型と、「INET6_ATON()」「INET6_NTOA()」関数を使うことになりますが、これはまだやってみていません。

4. 参考サイト

 本ページは、「ChatGPT」軍曹および下記のサイトを参考にさせていただきました。
ネットワークアドレス型

EaseUS
AbemaTV 無料体験