High Performance MySQL バージョン 3 (セクション 4.1.7) を見ると、著者は IPv4 アドレスを保存するときに、文字列ではなく 32 ビットの符号なし整数 (UNSIGNED INT) を使用して IP アドレスを保存することを推奨しています。しかし、具体的な理由は示されなかった。その理由を知るために、いくつかの情報を調べて記録しました。 文字列ストレージと比較して、符号なし整数をストレージに使用すると、次の利点があります。
通常、IPv4 アドレスを保存する場合、IPv4 アドレスには最低 7 文字、最大 15 文字が必要なので、VARCHAR(15) を使用できます。 MySQL が可変長文字列を保存する場合、文字列の長さを保存するために追加のバイトが必要になります。符号なし整数を使用して保存する場合は、4 バイトのみが必要です。さらに、4 つのフィールドを使用して IPv4 の各部分を個別に保存することもできますが、通常、ストレージ スペースとクエリ効率の点では、これはそれほど高くありません (この保存方法が適しているシナリオがいくつかある場合があります)。 文字列と符号なし整数を使用して IP を保存する場合の詳細なパフォーマンス分析とベンチマークについては、この記事を参照してください。 符号なし整数を保存に使用すると、次のような欠点もあります。
変換のために、MySQL は、文字列形式の IP を整数 INET_ATON に変換し、整数形式の IP を文字列 INET_NTOA に変換するための対応する関数を提供します。以下のように表示されます。 mysql> inet_aton('192.168.0.1') を選択します。 +--------------------------+ | inet_aton('192.168.0.1') | +--------------------------+ | 3232235521 | +--------------------------+ セット内の 1 行 (0.00 秒) mysql> inet_ntoa(3232235521) を選択します。 +-----------------------+ | inet_ntoa(3232235521) | +-----------------------+ | 192.168.0.1 | +-----------------------+ セット内の 1 行 (0.00 秒) IPv6 の場合、VARBINARY を使用することで同じ利点が得られ、MySQL では対応する変換関数、つまり INET6_ATON と INET6_NTOA も提供されます。 パッケージ com.mikan; /** * @author みかん * @日付 2015-09-22 10:59 */ パブリッククラスIpLongUtils { /** * 文字列IPをlongに変換する * * @param ipStr 文字列 IP * @IPに対応するlong値を返します*/ パブリック静的long ip2Long(String ipStr) { 文字列[] ip = ipStr.split("\\."); (Long.valueOf(ip[0]) << 24) + (Long.valueOf(ip[1]) << 16) を返します。 + (Long.valueOf(ip[2]) << 8) + Long.valueOf(ip[3]); } /** * IP の長い値を文字列に変換します* * @param ipLong IP の long 値* @return long 値に対応する文字列*/ パブリック静的文字列 long2Ip(long ipLong) { StringBuilder ip = 新しい StringBuilder(); ip.append(ipLong >>> 24).append("."); ip.append((ipLong >>> 16) & 0xFF).append("."); ip.append((ipLong >>> 8) & 0xFF).append("."); ip.append(ipLong & 0xFF); ip.toString() を返します。 } パブリック静的voidメイン(String[] args) { System.out.println(ip2Long("192.168.0.1")); システム出力のprintln(long2Ip(3232235521L)); System.out.println(ip2Long("10.0.0.1")); } }
これで、MySQL に IP アドレスを効果的に保存する方法と、文字列 IP と数値を変換する方法についての記事は終了です。MySQL に IP アドレスを効果的に保存する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: Linux システムでの gcc コマンドの使用法の詳細な説明
Excel は、データ分析に最もよく使用されるツールです。この記事では、MySQL と Excel ...
この記事の例では、el-tableを使用して列と行を動的にマージするVueの具体的なコードを参考まで...
1. インデックスの役割一般的なアプリケーション システムでは、読み取りと書き込みの比率は約 10:...
目次1. 現状2. コミュニティソリューション2.1 事業レビュー3. 技術的ソリューション3.1....
robots.txt の基本的な紹介Robots.txt はプレーンテキスト ファイルであり、Web...
SQL (Structured Query Language) ステートメント、つまり構造化クエリ言...
目次1. ファイルを開くパラメータの紹介2. ファイルの読み取り3. ファイルを書き込む4. 閉じる...
目次1. Promiseとは何か2. 基本的な使い方3. Promiseメソッド3.1 Promis...
この記事には、細かい点は一切なく、カラーマッチングのテクニックをシェアするだけです。とてもシンプルで...
現在このような問題が発生しています 私の状況は、QT が動かなくなってしまったため、仮想マシンを再起...
目次1. 単一データベースのバックアップ2. 圧縮バックアップ3. マルチデータベースバックアップ4...
最近のプロジェクトでは、テキストを垂直に揃えたいと考え、CSS の writing-mode プロパ...
サーバーB(172.17.166.11)の電源がオンまたは再起動されると、サーバーA(172.17....
成果を達成する実装コードhtml <input type="radio" ...
序文システムをインストールしたときに、パーティション領域を適切に割り当てませんでした。その後のメンテ...