MySQLはinet_atonとinet_ntoaを使用してIPアドレスデータを処理します。

MySQLはinet_atonとinet_ntoaを使用してIPアドレスデータを処理します。

この記事では、適切な形式を使用して IP アドレス データをデータベースに保存し、IP アドレスを簡単に比較する方法を紹介します。

1. IPアドレスをデータベースに保存する

IP アドレスはデータベースに保存され、フィールドは通常次のように定義されます。

`ip` char(15) NULLではない、

IP アドレスの最大長 (255.255.255.255) は 15 なので、15 ビットの文字で十分です。

テーブルユーザーの作成

テーブル `user` を作成します (
 `id` int(11) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(30) NOT NULL,
 `ip` char(15) NULLではない、
 主キー (`id`)
)ENGINE=InnoDB;

データを挿入する

`user` (`id`, `name`, `ip`) 値に挿入
(2, 'アビー', '192.168.1.1'),
(3、「デイジー」、「172.16.11.66」)、
(4、「クリスティン」、「220.117.131.12」)

2. MySQL inet_aton および inet_ntoa メソッド

MySQLはIPアドレスを処理する2つの方法を提供する

inet_aton はip を符号なし整数 (4-8 ビット) に変換します。

inet_ntoaは整数IPアドレスをアドレスに変換する

データを挿入する前に、char(15) は 16 バイトを占めるため、 inet_atonを使用して IP アドレスを整数に変換し、スペースを節約します。

データを表示するときは、 inet_ntoaを使用して整数 IP アドレスを表示用のアドレスに変換します。

例:

テーブル `user` を作成します (
 `id` int(11) 符号なし NOT NULL AUTO_INCREMENT,
 `name` varchar(100) NOT NULL,
 `ip` int(10) 符号なしNOT NULL、
 主キー (`id`)
)ENGINE=InnoDB;

データを挿入する

`user` (`id`, `name`, `ip`) 値に挿入
(2, 'アビー', inet_aton('192.168.1.1')),
(3, 'デイジー', inet_aton('172.16.11.66')),
(4, 'クリスティン', inet_aton('220.117.131.12'));

mysql> `user` から * を選択します。
+----+-----------+------------+
| ID | 名前 | IP |
+----+-----------+------------+
| 2 | アビー | 3232235777 |
| 3 | デイジー | 2886732610 |
| 4 | クリスティン | 3698688780 |
+----+-----------+------------+

クエリは電気アドレスとして表示されます

mysql> `user` から id、name、inet_ntoa(ip) を ip として選択します。
+----+-----------+----------------+
| ID | 名前 | IP |
+----+-----------+----------------+
| 2 | アビー | 192.168.1.1 |
| 3 | デイジー | 172.16.11.66 |
| 4 | クリスティン | 220.117.131.12 |
+----+-----------+----------------+

3. 比較方法

特定のネットワーク セグメント (例: 172.16.11.1 ~ 172.16.11.100) 内のユーザーを検索する必要がある場合は、PHP の ip2long メソッドを使用して IP アドレスを整数に変換し、比較することができます。

<?php
172.16.11.1 のIPアドレス
172.16.11.100 のIPアドレス

echo 'ip2long(ip_start):'.sprintf('%u',ip2long($ip_start)); // 2886732545
echo 'ip2long(ip_end):'.sprintf('%u',ip2long($ip_end)); // 2886732644
?>

クエリ:

mysql> select ip,name,inet_ntoa(ip) as ip from `user` where ip>=2886732545 and ip<=2886732644;
+------------+-------+---------------+
| ip | 名前 | ip |
+------------+-------+---------------+
| 2886732610 | デイジー | 172.16.11.66 |
+------------+-------+---------------+

注: ip2long メソッドを使用して IP アドレスを整数に変換すると、大きな IP に負の数が表示される場合があります。原因と解決方法については、別の記事「 php ip2long における負の数の原因と解決方法の詳細な説明」を参照してください。

4. まとめ

1. unsigned int 形式を使用して IP アドレスをデータベースに保存します。挿入時に、inet_aton メソッドを使用して IP アドレスを unsigned integer に変換し、ストレージ スペースを節約します。

2. 表示時に inet_ntoa を使用して整数 IP アドレスをアドレスに変換します。

3. php ip2long が IP を整数に変換する場合、負の数に注意する必要があります。

上記の MySQL で inet_aton と inet_ntoa を使用して IP アドレス データを処理する例は、エディターが皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • MySQL に IP アドレスを保存する方法
  • MySQL のデータベース間テーブルレプリケーションの例 (同じ IP アドレス内)
  • IP アドレスを整数に変換する PHP メソッド、Asp メソッド、MsSQL メソッド、MySQL メソッド
  • MySQL の inet_aton() および inet_ntoa() 関数を使用して IP アドレスを保存する方法
  • IP アドレス経由で MySql にアクセスする方法

<<:  js でオブジェクトとオブジェクト メソッドを作成するいくつかの方法の詳細な説明

>>:  Linux のファイル圧縮とパッケージ化の概要

推薦する

【Webデザイン】E-WebTemplates の美しい海外の Web ページ テンプレート (FLASH+PSD ソース ファイル+HTML) を共有します

これらはすべて海外のE-WebTemplates WebサイトからのWebページテンプレートであり、...

Docker 入門インストールチュートリアル (初心者版)

ドクター紹介: Docker はコンテナ関連の技術です。簡単に言うと、さまざまなソフトウェアを実行で...

WeChat アプレットのシンプルなログイン ページの実装 (ソース コード付き)

目次1. 上の写真2. ユーザーが存在しない3. コードをアップロードする1. 上の写真 2. ユー...

MySQL でコミットされていないトランザクションを見つけるための SQL の例の簡単な分析

以前、「MySQL でコミットされていないトランザクション情報を検索する方法」というタイトルのブログ...

ミニプログラムカスタムタブバーコンポーネントのカプセル化

この記事の例では、ミニプログラムのカスタムタブバーコンポーネントをカプセル化するための具体的なコード...

Mysqlデータベースの文字化けに対処する方法

MySQL では、データベースの文字化けは一般的に文字セットを設定することで修正できますが、文字化け...

Tomcat のパフォーマンス最適化のための Apr モジュールの構築方法

序文Tomcat は、無数のチューニング オプションを備えた、広く使用されている Java Web ...

HTML doctype の役割の紹介

ドキュメント モードには次の 2 つの機能があります。 1. HTML文書を解析するためにどのHTM...

インデックスを設計する際の原則は何ですか? インデックスの障害を回避するにはどうすればよいでしょうか?

目次主キーインデックス頻繁にクエリされるフィールドのインデックスを作成する大きなフィールドのインデッ...

MySQLでトランザクションを開始する方法

序文この記事では主にMySQLでトランザクションを開始する方法について紹介します。関連情報については...

MySQL レプリケーション テーブルの詳細とサンプル コード

MySQL レプリケーション テーブルの詳細な説明テーブル構造、インデックス、デフォルト値などを含む...

uniappがインターフェースドメイン名を動的に取得する方法を分析する

背景インターフェイス ドメイン名はハードコードされておらず、動的に取得されます。具体的な実装は、静的...

MySQL がデュアルマスターで構成されている場合にデータループの競合を回避する方法

あなたはこの質問について考えたことがあるでしょうか?デュアルアクティブが構成されている場合、データル...

海外でダウンロードできる25個の新鮮で便利なアイコンセット

1. Eコマースアイコン2. アイコンスイーツ2 3. 携帯電話アイコンパック4. 旗アイコンセット...

Docker Enterprise Edition を使用して独自のプライベート レジストリ サーバーを構築する

Docker は本当に素晴らしいです。特に、仮想マシンを使用する場合に比べて、Docker イメージ...