MySQL 쿼리에서 다음과 같은 결과가 나오는 이유를 이해하는 데 문제가 있습니다. IP 주소를 INTEGERS로 저장하고 있습니다.MYSQL REGEXP INET_NTOA IP 주소 검색
mysql> SELECT ip AS ip FROM ipaddress;
+-----------+
| ip |
+-----------+
| 168456058 |
| 168456059 |
| 168456060 |
| 168456061 |
| 168456317 |
| 168456570 |
| 168489683 |
| 168489583 |
| 168489683 |
+-----------+
9 rows in set (0.00 sec)
다음은 INTEGERS를 IP 주소로 변환 할 때 데이터가 표시되는 방식입니다.
mysql> SELECT INET_NTOA(ip) AS ip FROM ipaddress;
+---------------+
| ip |
+---------------+
| 10.10.111.122 |
| 10.10.111.123 |
| 10.10.111.124 |
| 10.10.111.125 |
| 10.10.112.125 |
| 10.10.113.122 |
| 10.10.242.211 |
| 10.10.242.111 |
| 10.10.242.211 |
+---------------+
9 rows in set (0.00 sec)
나는 특정 서브넷을 검색
, 등 (111), 나는 결과가 내가 기대 얻을 : 나는 쿼리의 진수를 사용하는 경우mysql> SELECT INET_NTOA(ip) AS ip FROM ipaddress WHERE INET_NTOA(ip) REGEXP '[[:<:]]111[[:>:]]';
+---------------+
| ip |
+---------------+
| 10.10.111.122 |
| 10.10.111.123 |
| 10.10.111.124 |
| 10.10.111.125 |
| 10.10.242.111 |
+---------------+
5 rows in set (0.00 sec)
, 나는 어떤 결과를 얻을 수 없습니다.
mysql> SELECT INET_NTOA(ip) AS ip FROM ipaddress WHERE INET_NTOA(ip) REGEXP '[[:<:]]\.111[[:>:]]';
Empty set (0.00 sec)
검색 쿼리를 .11로 변경하면 쿼리의 소수점이 작동합니다. 이번에는 .111, 및 .211이 모두 있습니다. 내가 검색 0.11을 사용할 때
mysql> SELECT INET_NTOA(ip) AS ip FROM ipaddress WHERE INET_NTOA(ip) REGEXP '[[:<:]]\.11[[:>:]]';
+---------------+
| ip |
+---------------+
| 10.10.111.122 |
| 10.10.111.123 |
| 10.10.111.124 |
| 10.10.111.125 |
| 10.10.242.211 |
| 10.10.242.111 |
| 10.10.242.211 |
+---------------+
7 rows in set (0.00 sec)
왜 0.11 검색 작업과 0.111가 작동하지 것입니다, 나는뿐만 아니라 0.211 결과를 얻을?
실제 질문과는 별도로 IP 주소를 정수로 저장하는 것이 궁금합니다. 우주에서 아주 단단합니까? 아니면 그들에게 멋진 수학을하고 있습니까? 문자열을 (약간 큰) 문자열로 저장하면 인터넷 주소 형식으로 변환하거나 변환하지 않아도됩니다. –
나는 공간이 부족하지 않다. 실제로 IP 주소를 오랫동안 문자열로 저장했지만 IP 주소를 정수로 저장할 수있는 MySQL의 INET_NTOA 함수를 발견했을 때 IP 주소로 정렬 할 때 더 나은 솔루션이라고 생각했습니다. 문자열로 저장하는 것이 더 쉬운 솔루션이라는 점에 동의합니다. – Marc