VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
INET6_ATON()과 INET6_NTOA()를 제공하고 잘 동작하지만 — IPv4와 IPv6를 하나의 열에 섞으려면 추가 주의가 필요합니다. VillageSQL의 INET 타입은 두 주소 패밀리를 일관된 API로 하나의 열에 저장합니다.
MySQL의 IPv6 접근법: VARBINARY(16)
MySQL은 바이너리 IPv6 저장을 위해INET6_ATON()과 INET6_NTOA()를 제공합니다. INET6_ATON()은 IPv4와 IPv6를 모두 처리합니다:
INET6_NTOA()는 IPv4를 점으로 구분된 십진 표기로, IPv6를 압축 표기로 반환합니다. VARBINARY(16) 열은 둘 다 담습니다. 이것이 표준 접근법이고 잘 동작합니다.
마찰은 행에 어느 패밀리가 들어 있는지 알아야 하는 작업에서 생깁니다:
VARBINARY 열에서 프리픽스 길이, 넷마스크, 네트워크 주소를 추출하는 내장 방법은 없습니다.
VillageSQL과 함께: 통합 INET 타입
VillageSQL의vsql_network_address 확장은 IPv4와 IPv6를 모두 네이티브로 저장하는 INET 타입을 제공합니다. 같은 함수가 두 패밀리에 모두 동작합니다 — 길이 검사나 별도의 코드 경로가 필요하지 않습니다.
IPv6를 구체적으로 다루기
IPv6 주소는 확장 표기로 저장되고 조회됩니다:주소 패밀리로 필터링하기
IPv6에 대한 MySQL과 VillageSQL 비교
자주 묻는 질문
INET 타입은 IPv4를 IPv4 매핑 IPv6 형식(::ffff:x.x.x.x)으로 저장하나요?
아니요 — IPv4 주소는 IPv4 매핑 IPv6가 아니라 네이티브 IPv4로 저장됩니다.inet_family()는 IPv4 주소가 어떻게 쓰였든 4를 반환합니다.
INET은 ::1 같은 IPv6 압축 표기를 처리하나요?
예.inet_from_string('::1')과 inet_from_string('fe80::1') 모두 올바르게 파싱됩니다. 압축 표기는 입력에서 허용되며, 출력은 항상 확장 형식입니다.
빠른 조회를 위해 INET 열에 인덱스를 만들 수 있나요?
예 —CREATE INDEX idx_ip ON access_log(ip_address)가 동작합니다. 동등 조회와 (서브넷 쿼리를 위한) 범위 스캔이 인덱스를 사용합니다. 패턴은 MySQL에서 서브넷으로 쿼리하기를 보세요.
VARBINARY(16) + INET6_ATON은 잘못된 방법인가요?
아니요 — MySQL만 사용할 때의 올바른 접근법입니다. INET보다 저장 공간을 덜 차지하지만(4 또는 16바이트 대 고정 19바이트), 내장 패밀리 감지, 프리픽스 처리, 검증을 잃습니다. IPv4와 IPv6 모두에 걸쳐 프리픽스 인식 작업이 필요한 스키마에는INET이 더 편리합니다.
문제 해결
함께 보기
- MySQL에 IP 주소 저장하기 — INET으로 보는 IPv4/IPv6의 전체 그림
- MySQL에서 서브넷으로 쿼리하기 — INET 타입을 사용한 서브넷 범위 쿼리
- MySQL에 MAC 주소 저장하기 — 같은 확장의 MACADDR 타입