developer tip

IP 주소에 사용할 MySQL 데이터 유형은 무엇입니까?

optionbox 2020. 9. 3. 08:22
반응형

IP 주소에 사용할 MySQL 데이터 유형은 무엇입니까? [복제]


중복 가능성 :
mySQL에 IP를 저장하는 방법

$_SERVER['REMOTE_ADDR']다른 $_SERVER변수 에서 IP 주소를 얻고 싶습니다 . 어떤 데이터 유형이 이에 적합합니까?

그렇 VARCHAR(n)습니까?


IPv4 주소의 길이는 4 바이트이므로 정확히 4 바이트 인 INT( UNSIGNED)사용할 수 있습니다 .

`ipv4` INT UNSIGNED

그리고 INET_ATONINET_NTOA변환합니다 :

INSERT INTO `table` (`ipv4`) VALUES (INET_ATON("127.0.0.1"));
SELECT INET_NTOA(`ipv4`) FROM `table`;

IPv6 주소의 경우 BINARY대신 다음을 사용할 수 있습니다 .

`ipv6` BINARY(16)

그리고 PHPinet_ptoninet_ntop변환을 사용하십시오.

'INSERT INTO `table` (`ipv6`) VALUES ("'.mysqli_real_escape_string(inet_pton('2001:4860:a005::68')).'")'
'SELECT `ipv6` FROM `table`'
$ipv6 = inet_pton($row['ipv6']);

두 가지 가능성이 있습니다 (IPv4 주소의 경우).

  • a varchar(15), IP 주소를 문자열로 저장하려는 경우
    • 192.128.0.15 예를 들어
  • integer(4 바이트), 당신은 정수로 IP 주소를 변환하는 경우
    • 3229614095 이전에 사용한 IP의 경우


두 번째 솔루션은 데이터베이스에서 더 적은 공간을 필요로하며 데이터를 저장하고 검색 할 때 (문자열로 /로 변환) 약간의 조작을 암시하더라도 더 나은 선택 일 것 입니다.

그 조작 정보의보고 ip2long()long2ip()는 PHP 측에, 기능, 또는 inet_aton()inet_ntoa()MySQL의 측에.


IPv4 주소의 경우 VARCHAR을 사용하여 문자열로 저장할 수 있지만 긴 정수로 저장할 수도 있습니다 INT(11) UNSIGNED. MySQL의 INET_ATON()함수를 사용 하여 정수 표현으로 변환 할 수 있습니다 . 이것의 장점은 BETWEEN쿼리 와 같이 쉽게 비교할 수 있다는 것입니다.

INET_ATON () MySQL 함수

참고 URL : https://stackoverflow.com/questions/5133580/which-mysql-datatype-to-use-for-an-ip-address

반응형