[MySQL] MySQL에서 IP저장단위 및 조회방법

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

MySQL에서 IP를 저장하는 방법과 호출하는 방법에 대해 알아보겠습니다.

 

▶︎ 준비사항

MySQL에서 IP를 저장하는 방법은 숫자형으로 저장이 됩니다. MySQL문서에서는 INT형보다는 INT UNSIGNED 컬럼을 사용할것을 권고하고 있습니다.

create table addr(ip int(11) unsigned);

 

▶︎ 사용방법

INET_ATON(expr)

일발적인 IPv4 네트워크 주소 방식으로 표현된 문자열로 주어지면 네트워크 바이트 순서(Big Endian)로 주소의 숫자 값을 나타내는 정수를 반환합니다. 만약 입력된 IP주소 형식이 틀리거나 범위가 넘어가면 NULL을 반환합니다.

mysql> insert into addr values(INET_ATON('213.35.16.9'));
Query OK, 1 row affected (0.00 sec)

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

 

위의 SQL Function인 INET_ATON을 이용해 데이터를 입력하면 특별한 숫자가 반환되는데 이 숫자들은 다음과 같은 방식으로 계산된 값입니다.

213×256(3의 제곱) + 35×256(2의 제곱) + 16×256 + 9

 

INET_NTOA(expr)

INET_ATON 컬럼에 의해 저장된 숫자를 사람이 알아볼 수 있는 IP단위로 출력합니다. 범위가 벗어나거나 펑션이 이해하지 못하는 숫자를 제시하면 NULL을 반환합니다.

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

 

Designed by JB FACTORY