MySQLがIPアドレスを格納する方法

2636 ワード

なぜIPの保存方法を聞くのですか?
まず、なぜIPをどのように保存するのか、直接varcharタイプを聞けばいいのではないでしょうか.
実際には、どのプログラム設計も機能実装に基づいてパフォーマンスを最大限に最適化する必要があります.データベース設計はプログラム設計において無視できない重要な部分であるため、IPアドレスを巧みに保存することはある程度向上することができる.
関数アルゴリズムによる処理
MySQLではIPタイプフィールドは直接提供されていませんが、2つの関数があれば最大長10ビットのデジタルタイプとIPを互いに回転させることができるので、intタイプのストレージIPを使用するとvarcharタイプのストレージIPアドレスよりもパフォーマンスが向上し、スペースが少なくなります.varcharは可変長形なので、余分な1バイトのストレージ長が必要です.またint型は論理演算でvarcharよりも速い.
IP回転数関数inet_aton()
いくつかの一般的なIPアドレスを変換します

 mysql> select inet_aton('255.255.255.255');
 +------------------------------+
 | inet_aton('255.255.255.255') |
 +------------------------------+
 |          4294967295 |
 +------------------------------+
 1 row in set (0.00 sec)
  
 mysql> select inet_aton('192.168.1.1');  
 +--------------------------+
 | inet_aton('192.168.1.1') |
 +--------------------------+
 |        3232235777 |
 +--------------------------+
 1 row in set (0.00 sec)
  
 mysql> select inet_aton('10.10.10.10');
 +--------------------------+
 | inet_aton('10.10.10.10') |
 +--------------------------+
 |        168430090 |
 +--------------------------+
 1 row in set (0.00 sec)

したがって、IPのテーブルフィールドはINT(10)に設定すればよいが、IPが取得できなければ0を直接保存してIPが取得できないことを意味する
 
デジタルIP関数inet_ntoa()

 mysql> select inet_ntoa(4294967295);
 +-----------------------+
 | inet_ntoa(4294967295) |
 +-----------------------+
 | 255.255.255.255    |
 +-----------------------+
 1 row in set (0.00 sec)
 
 mysql> select inet_ntoa(3232235777);
 +-----------------------+
 | inet_ntoa(3232235777) |
 +-----------------------+
 | 192.168.1.1      |
 +-----------------------+
 1 row in set (0.00 sec)
 
 mysql> select inet_ntoa(168430090);
 +----------------------+
 | inet_ntoa(168430090) |
 +----------------------+
 | 10.10.10.10     |
 +----------------------+
 1 row in set (0.00 sec)
  
 mysql> select inet_ntoa(0);    
 +--------------+
 | inet_ntoa(0) |
 +--------------+
 | 0.0.0.0   |
 +--------------+
 1 row in set (0.00 sec)

0は0.0.0.0に変換されます.
整数フィールドの比較は文字列よりも効率が高く、最適化の原則にも合致します.フィールドタイプ定義は最適(最小)、最も簡単なデータ型を使用します.inet_aton()アルゴリズムは,国際的に各国のIPアドレスの区別に用いられるip numberを借りている.a.b.c.dのip numberは、a*256の3次+b*256の2次+c*256の1次+d*256の0次である.
以上説明したのはMySQLがIPアドレスを保存する方法で、皆さんの勉強に役立つことを望んでいます.