본문 바로가기

프로그래밍/DBMS

[Mysql] 아이피 주소 데이터 유형?

이때까지 IP 주소를 varchar형으로 저장 했었는데 IP는 4바이트 정수형을 선언하기를 권장하고 있다.

IP를 정수형으로 변환하여 저장하게 되면 용량과 검색에 더 효과적이라고 한다.


MYSQL 레퍼런스

http://www.mysqlkorea.co.kr/sub.html?mcode=manual&scode=01&m_no=21839&cat1=12&cat2=359&cat3=375&lang=k


여기서 정수형 변환을 지원하는 함수가 있다.


INET_ATON(expr)

 4개로 구분된 네트워크 주소를 스트링 형태로 입력하면네크워크 주소의 
수치적 값을 표현하기 위한 정수값이 리턴 된다이러한 주소는 4 또는 8 바이트 주소가 됨.

mysql> SELECT INET_ATON('112.115.203.45');        

결과값은 1886636845으로, 함수가 반환하는 값은 항상 네트워크 바이트 순서가 된다. 

리턴되는 숫자는 112×2563 + 115×2562 + 203×256 + 45로 계산이 됨.

INET_ATON() IP 주소의 축약형도 인식한다.

mysql> SELECT INET_ATON('127.0.0.1'), INET_ATON('127.1');       -> 2130706433, 2130706433

NoteINET_ATON()에 의해 생성된 값을 정렬할 경우INT UNSIGNED 

컬럼을 사용할 것을 권고한다만일 (부호화 된INT 컬럼을 사용한다면127 보다 큰 첫 번째 8진수에 해당하 IP 주소 값은 정확하게 저장되지 않는다

Section 11.2, “Numeric Types”를 참조할 것.


  • INET_NTOA(expr)

수치적인 네트워크 주소 (4 또는 8 바이트)를 입력하면 4개로 구분되는 스트링 형태의 값이 리턴된다.

mysql> SELECT INET_NTOA(3520061480);        -> '209.207.224.40'

IPv6의 경우 BINARY(16) 로 데이터 유형을 설정하고 INET6_ATON/INET6_NTOA 를 사용한다.

IPv4의 경우 INT UNSIGNED로 데이터 유형을 설정하고 INET_ATON/INET_NTOA를 사용한다