복붙노트

[SQL] 클라이언트 IP 주소에 대한 최대 길이 [중복]

SQL

클라이언트 IP 주소에 대한 최대 길이 [중복]

당신은 클라이언트의 IP 주소를 저장하는 데이터베이스 컬럼에 대한 최대 크기로 무엇을 추천 할 것입니다? 나는 지금 16로 설정되어 있지만, 나는 이상 등의 IPv6와 그보다 IP 주소를 얻을 수 있을까?

해결법

  1. ==============================

    1.IPv4를 들어, IP 어드레스의 4 바이트 원료 저장 넘어갈 수있다 (IP 주소의 기간 사이의 각 숫자는 255, 즉 1 바이트이다). 그러나 당신의 지저분한에와 DB에서 벗어나 있다는 것 번역해야합니다.

    IPv4를 들어, IP 어드레스의 4 바이트 원료 저장 넘어갈 수있다 (IP 주소의 기간 사이의 각 숫자는 255, 즉 1 바이트이다). 그러나 당신의 지저분한에와 DB에서 벗어나 있다는 것 번역해야합니다.

    (IPv4 주소의 32 비트와는 대조적으로) IPv6 주소는 128 비트이다. 2001 : 0db8 : 85a3 : 0000 : 0000 : 8a2e : 0370 : 7334 그들은 보통 콜론으로 구분 4 16 진수 8 개 그룹으로 기록된다. 39 개 문자 형식으로 IPv6 주소를 저장하기에 적합합니다.

    편집 : 그러나,주의가, IPv4 맵 IPv6 주소에 대한 자세한 내용은 디팍의 답변을 @ 참조하십시오. (올바른 최대의 IPv6 문자열 길이는 45 자입니다.)

  2. ==============================

    2.일반 39 문자의 IPv6 구조의주의해야 할 점은있다. IPv4를 IPv6 주소를 매핑를 들어, 문자열 이상 (39 자 이하)이 될 수 있습니다. 예는이를 표시합니다 :

    일반 39 문자의 IPv6 구조의주의해야 할 점은있다. IPv4를 IPv6 주소를 매핑를 들어, 문자열 이상 (39 자 이하)이 될 수 있습니다. 예는이를 표시합니다 :

    IPv6의 (39 자) :

    ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:ABCD
    

    IPv6의 (45 자) IPv4 맵 :

    ABCD:ABCD:ABCD:ABCD:ABCD:ABCD:192.168.158.190
    

    . 주 : IPv4를 1 바이트의 4 개 개의 그룹을 사용 점으로 구분 범위 0-255 4 진수 (문자)로 포맷으로 최종 32 비트 (IPv4 주소에 해당 대응)은 (15 개 문자를 필요로 할 그래서 최대) DDD.DDD.DDD.DDD이다.

    정확한 최대의 IPv6 문자열 길이는, 따라서, (45)이다.

    이것은 실제로 내가 참석의 IPv6 교육의 퀴즈 질문이었다. (우리는 모두 39 대답!)

  3. ==============================

    3.당신은 표준 표기법으로 IPV6을 처리하려면 4 16 진수의 8 개 그룹이 있습니다 :

    당신은 표준 표기법으로 IPV6을 처리하려면 4 16 진수의 8 개 그룹이 있습니다 :

    2001:0dc5:72a3:0000:0000:802e:3370:73E4
    

    16 진수 32 + 7 = 39 개 문자 세퍼레이터.

    주의 : 당신은 또한, IPV6 주소로 매핑 IPV4 주소를 보유 @Deepak에서 알 수 있듯이 45 개 문자를 사용합니다.

  4. ==============================

    4.단지 VARCHAR를 사용하여 ... 그것을 모두 세 가지 방법을 시도 누군가로부터 (39) 가져가

    단지 VARCHAR를 사용하여 ... 그것을 모두 세 가지 방법을 시도 누군가로부터 (39) 가져가

    약간 덜 효율적인 스토리지는 지금까지 삽입 / 업데이트에 변환 어디서나 그것을 보여주는 때를 포맷해야하는 모든 혜택을 능가.

  5. ==============================

    5.으로는 IPv6를 위키 백과의 문서에서 설명

    으로는 IPv6를 위키 백과의 문서에서 설명

    일반적인 IPv6 주소 :

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    이는 39 자입니다. 당신이 생각할 진 (16) 열을 사용할 수 있도록 IPv6 주소는 긴 128 비트,하지만 난 내가 알파벳과 숫자 표현으로 다루고 싶어요 생각합니다.

  6. ==============================

    6.IPv4를 형태로 32 비트를 사용하여

    IPv4를 형태로 32 비트를 사용하여

    255.255.255.255
    

    나는 당신이 단지 CHAR 유형 문자열로 저장하고 또는 숫자 유형을 사용하는 경우인지, 당신의 데이터 유형에 따라 달라집니다 같아요.

    IPv6은 128 비트를 사용한다. 당신이 그들과 다른 정보를 포함하지 않는 한 당신은 더 이상보다 IP를 필요가 없습니다.

    IPv6은 추천 (위키), 콜론으로 구분 4 16 진수의 세트로 그룹화된다 :

    2001:0db8:85a3:0000:0000:8a2e:0370:7334
    

    당신은 당신이 그렇게 할 경우, 39 문자 긴 문자열로 저장하는 안전 해요. 물론 것처럼 주소를 쓸 수있는 다른 속기의 방법이 있습니다. 제로 세트는 하나의 0으로 잘릴 수있다, 또는 제로의 세트는 이중 콜론으로 완전히 숨길 수 있습니다.

  7. ==============================

    7.그냥 참조 할 수 있도록 저장하는 경우 문자열로 저장할 수 있습니다,하지만 당신은 조회를 수행하려는 경우 IP 주소가 어떤 테이블에, 당신이 필요로하는 경우, 예를 들어보기 위해 "정규 표현을." A (대형) 번호로 모든 일을 변환하는 것은 옳은 일이다. IPv4 주소는 긴 INT (32 비트)로 저장 될 수 있지만 IPv6 주소를 저장하는 128 비트 번호가 필요합니다.

    그냥 참조 할 수 있도록 저장하는 경우 문자열로 저장할 수 있습니다,하지만 당신은 조회를 수행하려는 경우 IP 주소가 어떤 테이블에, 당신이 필요로하는 경우, 예를 들어보기 위해 "정규 표현을." A (대형) 번호로 모든 일을 변환하는 것은 옳은 일이다. IPv4 주소는 긴 INT (32 비트)로 저장 될 수 있지만 IPv6 주소를 저장하는 128 비트 번호가 필요합니다.

    127.0.0.1, 127.000.000.001, : 1, 0 : 0 : 0 : 0 : 0 : 0 : 0 : 예를 들어, 모든 문자열은 정말 동일한 IP 주소입니다 (1)

  8. ==============================

    8.하나는 원시 데이터로 IP 주소를 압축 할 때 사람들은 문자에 대해 말하고있다.

    하나는 원시 데이터로 IP 주소를 압축 할 때 사람들은 문자에 대해 말하고있다.

    그래서 원칙적으로, 이후 우리는 IPv4 만 (32 비트) 또는 IPv6 (128 비트), 대부분의 공간이 128 비트, 또는 8분의 128 = 16 바이트에서 필요로하는 방법을 사용!

    어느가 (가정 캐릭터 세트가 ASCII입니다) 39 바이트를 제안보다 훨씬 적습니다.

    즉 (PHP의 32 비트 IP에 대해 () ip2long 참조 내가 전에 그것을 한 적이)는 디코드해야하고 그 자체로하는 것은 할 수있는 사소한 일이 원시 데이터에서 /에 IP 주소를 인코딩합니다 말했다.

    편집 : inet_pton (그 반대 inet_ntop ()) 당신이 필요하지, 두 주소 유형에서 작동합니다. 하지만 PHP 5.3부터 사용할 수 Windows에서, 조심.

  9. from https://stackoverflow.com/questions/1076714/max-length-for-client-ip-address by cc-by-sa and MIT license