MySQL IP주소 저장 및 조회

 

Summry

본 문서에서는 mysql에서 효율적으로 IP주소를 저장 및 조회하는 방법을 정리한다.

send me email if you have any questions.


보통 IP를 DB에 저장할 때는 char 형태의 컬럼(varchar 혹은 char)을 사용하기도 한다.
그러나 MySQL에서는 IP를 특화된 방법으로 저장하고 불러올 수 있다. 또한 저장 방법이 Integer방식이기 때문에 검색에서 더 효율적이다.

저장 및 조회

INET_ATON(expr)

일발적인 IPv4 네트워크 주소 방식으로 표현된 문자열로 주어지면 네트워크 바이트 순서(Big Endian)로 주소의 숫자 값을 나타내는 정수를 반환한다.

  • 만약 입력된 IP주소 형식이 틀리거나 범위가 넘어가면 NULL을 반환한다.
mysql> insert into addr values(INET_ATON('192.168.0.1'));
Query OK, 1 row affected (0.00 sec)

mysql> select * from addr;
+------------+
| ip         |
+------------+
| 3232235521 |
+------------+
1 row in set (0.00 sec)

INET_NTOA(expr)

INET_ATON 컬럼에 의해 저장된 숫자를 사람이 알아볼 수 있는 IP단위로 출력한다.

  • 범위가 벗어나거나 펑션이 이해하지 못하는 숫자를 제시하면 NULL을 반환한다.
mysql> select INET_NTOA(ip) from addr;
+---------------+
| INET_NTOA(ip) |
+---------------+
| 192.168.0.1   |
+---------------+
1 row in set (0.00 sec)

Reference

[MySQL] MySQL에서 IP저장단위 및 조회방법 - 인프라쟁이 DBA