[Mysql] 아이피 주소 데이터 유형?
이때까지 IP 주소를 varchar형으로 저장 했었는데 IP는 4바이트 정수형을 선언하기를 권장하고 있다.
IP를 정수형으로 변환하여 저장하게 되면 용량과 검색에 더 효과적이라고 한다.
MYSQL 레퍼런스
여기서 정수형 변환을 지원하는 함수가 있다.
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
Note: INET_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'