Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 varchar 열의 IP 주소를 정수로 변환하는 방법 – INET_ATON() 함수 활용법

INET_ATON() 함수로 IP 주소를 정수로 변환하기

MySQL에서 varchar 타입으로 저장된 IP 주소를 정수(integer) 값으로 변환하려면 INET_ATON() 함수를 사용하면 됩니다. 이 함수는 '192.168.120.0'과 같은 점 표기법(dotted notation)의 IP 주소 문자열을 네트워크 바이트 순서의 숫자 값으로 변환해 줍니다.

실제 예제를 통해 단계별로 살펴보겠습니다.

1단계: 테이블 생성

먼저 IP 주소를 varchar 타입으로 저장할 테이블을 생성합니다.

mysql> create table DemoTable1404
    -> (
    -> IpAddress varchar(40)
    -> );
Query OK, 0 rows affected (1.02 sec)

2단계: 데이터 삽입

INSERT 문을 사용하여 샘플 IP 주소를 입력합니다.

mysql> insert into DemoTable1404 values('192.168.120.0');
Query OK, 1 row affected (0.43 sec)
mysql> insert into DemoTable1404 values('192.168.120.20');
Query OK, 1 row affected (0.60 sec)
mysql> insert into DemoTable1404 values('224.0.0.0');
Query OK, 1 row affected (0.42 sec)

3단계: 저장된 데이터 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select * from DemoTable1404;

실행 결과는 다음과 같습니다.

+----------------+
| IpAddress |
+----------------+
| 192.168.120.0 |
| 192.168.120.20 |
| 224.0.0.0 |
+----------------+
3 rows in set (0.00 sec)

4단계: INET_ATON()으로 IP 주소를 정수로 변환

다음 쿼리는 varchar 열에 저장된 IP 주소를 동일한 테이블 내에서 정수 값으로 변환하여 보여줍니다.

mysql> select inet_aton(IpAddress) from DemoTable1404;

변환 결과는 아래와 같습니다.

+----------------------+
| inet_aton(IpAddress) |
+----------------------+
| 3232266240 |
| 3232266260 |
| 3758096384 |
+----------------------+
3 rows in set (0.00 sec)

5단계: 변환 검증 – INET_NTOA() 함수

이제 변환이 올바르게 수행되었는지 확인해 보겠습니다. INET_NTOA() 함수는 정수 값을 다시 IP 주소 문자열로 되돌려주는 역함수 역할을 합니다.

mysql> select inet_ntoa('3232266240');

실행 결과 원래의 IP 주소가 그대로 복원되는 것을 확인할 수 있습니다.

+-------------------------+
| inet_ntoa('3232266240') |
+-------------------------+
| 192.168.120.0 |
+-------------------------+
1 row in set (0.27 sec)

정리 및 추가 팁

이처럼 INET_ATON()INET_NTOA() 함수를 함께 사용하면 IP 주소를 문자열과 정수 사이에서 자유롭게 변환할 수 있습니다.

IP 주소를 정수로 저장하면 다음과 같은 장점이 있습니다.

- 저장 공간 절약: varchar(15)보다 INT UNSIGNED(4바이트) 또는 VARBINARY(16)가 더 효율적입니다.
- 빠른 비교 연산: 숫자 간 비교는 문자열 비교보다 훨씬 빠르므로 IP 범위 검색에 유리합니다.
- 인덱스 성능 향상: 정수 기반 인덱스는 정렬 및 검색 속도가 개선됩니다.

참고로 IPv6 주소까지 지원하려면 MySQL 5.6.3 이상에서 제공하는 INET6_ATON() / INET6_NTOA() 함수를 사용하는 것이 좋습니다.