>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 IPv6 주소를 효율적으로 저장하는 방법: DECIMAL(39,0) 대 VARBINARY(16)?

MySQL에서 IPv6 주소를 효율적으로 저장하는 방법: DECIMAL(39,0) 대 VARBINARY(16)?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-10-29 05:36:30764검색

  How to Efficiently Store IPv6 Addresses in MySQL: DECIMAL(39,0) vs. VARBINARY(16)?

MySQL에서 IPv6 주소를 효율적으로 저장

MySQL에서 IPv6 주소를 효율적으로 저장하는 것은 어려울 수 있습니다. 일반적으로 사용되는 두 가지 방법에는 두 개의 BIGINT 필드 또는 DECIMAL(39,0) 필드를 사용하는 것이 있습니다.

DECIMAL(39,0)의 장점과 단점

DECIMAL( 39,0)은 2*BIGINT에 비해 여러 가지 장점을 제공합니다.

  • 컴팩트한 크기: DECIMAL(39,0) 필드는 IPv6 주소를 단일 값으로 저장합니다. 두 개의 BIGINT 필드를 사용하는 것보다 간단합니다.
  • 더 빠른 쿼리: DECIMAL(39,0) 필드의 쿼리는 일반적으로 두 개의 BIGINT 필드보다 빠릅니다. 특히 범위 쿼리의 경우

그러나 DECIMAL(39,0)에는 몇 가지 단점도 있습니다.

  • 정밀도 제한: DECIMAL(39,0)은 39자리보다 큰 IPv6 주소를 처리할 수 없습니다. .
  • 표준 부족: IPv6 저장소에 DECIMAL(39,0)을 사용하는 것은 표준화된 접근 방식이 아니며 모든 MySQL 버전에서 지원되지 않을 수 있습니다.

2진수에서 10진수로 및 그 반대로 변환

inet_pton()이 반환한 2진수 형식을 MySQL에서 사용할 수 있는 10진수 문자열 형식으로 변환하려면 다음 PHP를 사용할 수 있습니다. 함수:

<code class="php">function binaryToDecimal($binary) {
  $hex = bin2hex($binary);
  return gmp_strval(gmp_init($hex, 16), 10);
}</code>

10진수 문자열을 2진수로 다시 변환하려면 다음 함수를 사용하세요.

<code class="php">function decimalToBinary($decimal) {
  $hex = gmp_strval(gmp_init($decimal), 16);
  return hex2bin($hex);
}</code>

IPv6 주소에 대한 스토리지 최적화

DECIMAL(39,0)을 사용하는 대신 더 효율적인 옵션은 VARBINARY(16) 열을 사용하고 inet_pton() 및 inet_ntop() 함수를 활용하여 변환하는 것입니다. 이 접근 방식은 MySQL 5.6 이상에서 지원되며 컴팩트함과 성능상의 이점을 모두 제공합니다.

위 내용은 MySQL에서 IPv6 주소를 효율적으로 저장하는 방법: DECIMAL(39,0) 대 VARBINARY(16)?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.