복붙노트

[SQL] SQL 서버에서 IP 주소를 저장하기에 가장 적합한 데이터 형식은 무엇입니까? [복제]

SQL

SQL 서버에서 IP 주소를 저장하기에 가장 적합한 데이터 형식은 무엇입니까? [복제]

SQL 서버의 IPv4 주소를 저장하기위한 가장 권장되는 데이터 타입은 무엇을해야 하는가?

아니면 누군가가 이미 그것을 위해 (닷넷 어셈블리) 사용자의 SQL 데이터 타입을 만들었습니다?

나는 정렬이 필요하지 않습니다.

해결법

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

    1.바이너리 (4)으로 IPv4 주소를 저장하는 것은 무엇을 나타내는 지에 진정한이며, 쉽게 서브넷 마스크 스타일의 쿼리 수 있습니다. 당신은 텍스트 표현 후 실제로 그러나, 그것은 내 및 변환이 필요합니다. 이 경우, 당신은 문자열 형식을 선호 할 수 있습니다.

    바이너리 (4)으로 IPv4 주소를 저장하는 것은 무엇을 나타내는 지에 진정한이며, 쉽게 서브넷 마스크 스타일의 쿼리 수 있습니다. 당신은 텍스트 표현 후 실제로 그러나, 그것은 내 및 변환이 필요합니다. 이 경우, 당신은 문자열 형식을 선호 할 수 있습니다.

    당신이 문자열로 저장하는 경우 힘의 도움 것을 조금 사용하는 SQL 서버 기능은 그런데, PARSENAME입니다. 하지 IP 주소를 설계하지만, 완벽하게 그들에게 적합합니다. 이 호출은 아래에 '14'을 반환합니다 :

    SELECT PARSENAME('123.234.23.14', 1)
    

    (번호는 왼쪽에서 오른쪽이다).

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

    2.나는 일반적으로 단지 IPv4 주소에 대한 VARCHAR (15)를 사용 -하지만 그들을 분류하면 패드 제로 않는 고통이다.

    나는 일반적으로 단지 IPv4 주소에 대한 VARCHAR (15)를 사용 -하지만 그들을 분류하면 패드 제로 않는 고통이다.

    또한 과거의 INT로 저장했습니다. System.Net.IPAddress는 IP 주소를 나타내는 4 바이트의 배열로 IP 주소를 반환하는 GetAddressBytes 방법이있다. 당신은 INT로하여 IPAddress를 변환하려면 다음 C # 코드를 사용할 수 있습니다 ...

    var ipAsInt = BitConverter.ToInt32(ip.GetAddressBytes(), 0);
    

    나는 속는 주소 검색을 많이해야했다, 그리고 싶었 기 때문에 인덱스가 작은 및 빠른 가능한 한 될 것을 사용했다. 이어서, 바이트 열로서 INT를 얻을 BitConverter GetBytes의 방법을 사용하여, .NET의 INT의 출력 및하여 IPAddress 객체로 어드레스 위로 당겨. 바이트 배열을하여 IPAddress 생성자에 그 바이트의 배열을 전달, 당신은 당신이 시작하는하여 IPAddress와 백 엔드.

    var myIp = new IPAddress(BitConverter.GetBytes(ipAsInt));
    
  3. ==============================

    3.허용 대답이 의견에 대해서

    허용 대답이 의견에 대해서

    여기에 SQL Server 2008의 트릭 (Itzik 벤 웨이 코 뮤니시에서이 책에)입니다

    with ip_addresses as
    (
    SELECT '131.33.2.201' AS ip_address UNION ALL
    SELECT '2.12.4.4' AS ip_address UNION ALL
    SELECT '131.33.2.202' AS ip_address UNION ALL
    SELECT '2.12.4.169' AS ip_address UNION ALL
    SELECT '131.107.2.201' AS ip_address 
    )
    select ip_address
    from ip_addresses
    ORDER  BY CAST('/' + ip_address + '/' AS hierarchyid)
    

    보고

    ip_address
    -------------
    2.12.4.4
    2.12.4.169
    131.33.2.201
    131.33.2.202
    131.107.2.201
    
  4. ==============================

    4.당신이 IP 주소를 구문 분석하는 정규 표현식을 사용하지 말아야하는 이유에 대해 내가 가장 좋아하는 기사 회담 중 하나입니다. 그들은 당신이 IP 주소의 텍스트 표현에 매우 조심해야하는 이유를 정말 설명되어 무슨 말을하는지 대부분. 난 당신이 데이터 형식 앱이 일을 할 것이다 취급 무엇 이건 아마도 데이터베이스에 사용하고, 무엇을 결정하기 전에 읽어 제안 (기사가 펄에 대해 설명하더라도, 어떤 언어에 대한 유용합니다).

    당신이 IP 주소를 구문 분석하는 정규 표현식을 사용하지 말아야하는 이유에 대해 내가 가장 좋아하는 기사 회담 중 하나입니다. 그들은 당신이 IP 주소의 텍스트 표현에 매우 조심해야하는 이유를 정말 설명되어 무슨 말을하는지 대부분. 난 당신이 데이터 형식 앱이 일을 할 것이다 취급 무엇 이건 아마도 데이터베이스에 사용하고, 무엇을 결정하기 전에 읽어 제안 (기사가 펄에 대해 설명하더라도, 어떤 언어에 대한 유용합니다).

    나는 32 비트 데이터 형식 (또는 4 개의 8 비트 데이터 유형)이 최고의 선택이 될 것입니다 결국 생각합니다.

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

    5.여기에 비슷한 질문을 많이 읽고 있어요,이 하나의 응답 중 누구도 다른 사람의 번호를 하나의 답을 언급하지 : "IPv4 주소의 경우 (서명 int로 그들을 저장하고 INET_ATON를 사용하려면)과 수 INET_NTOA ()의 숫자 값에서 IP 주소를 반환하는 기능, 그리고 그 반대를 반대. " 나는 이것이 내가 위에서 언급 한 PHP 함수를 사용하기로 결정하지 않는 한, 내 DB에 갈거야 무슨 생각합니다.

    여기에 비슷한 질문을 많이 읽고 있어요,이 하나의 응답 중 누구도 다른 사람의 번호를 하나의 답을 언급하지 : "IPv4 주소의 경우 (서명 int로 그들을 저장하고 INET_ATON를 사용하려면)과 수 INET_NTOA ()의 숫자 값에서 IP 주소를 반환하는 기능, 그리고 그 반대를 반대. " 나는 이것이 내가 위에서 언급 한 PHP 함수를 사용하기로 결정하지 않는 한, 내 DB에 갈거야 무슨 생각합니다.

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

    6.IPV4? int로? 또는 TINYINT는 4 X?

    IPV4? int로? 또는 TINYINT는 4 X?

    정말 그냥 저장 및 검색 여부에 따라 달라집니다이거나 원거리 검색 기준이 될 것합니다.

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

    7.IPv6를 잊지 마세요 - 128bits에서 IPv4의 32 비교 - 당신이 그들을 할 필요가있는 경우 당신은 더 많은 공간이 필요합니다.

    IPv6를 잊지 마세요 - 128bits에서 IPv4의 32 비교 - 당신이 그들을 할 필요가있는 경우 당신은 더 많은 공간이 필요합니다.

    당신이 인간 친화적 인 버전으로 변환하는 헬퍼 코드가 필요하지만 나는, BIGINT 가고 싶어.

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

    8.공간을 효율적으로 저장하고,이 값 (또는 유사한 범위에 비해) 처리 될 때, I는 int를 사용. IP 주소는 정말 그냥 32 비트 값이다.

    공간을 효율적으로 저장하고,이 값 (또는 유사한 범위에 비해) 처리 될 때, I는 int를 사용. IP 주소는 정말 그냥 32 비트 값이다.

    당신은 단지 그것을 볼 수있는 값을 저장할 간단한 솔루션의 경우, 필자는 IP 주소의 문자열 표현을 저장하는 VARCHAR (15)를 사용합니다.

  9. ==============================

    9.가장 좋은 방법은 (필요가 정렬되지 않으며 IP를 다른 컨트롤) VARCHAR 등 단순한 무고한 INT보다 훨씬 더 높은 성능을 비용이로 저장 (int)로 저장할 수 있습니다.

    가장 좋은 방법은 (필요가 정렬되지 않으며 IP를 다른 컨트롤) VARCHAR 등 단순한 무고한 INT보다 훨씬 더 높은 성능을 비용이로 저장 (int)로 저장할 수 있습니다.

    이 속성 IPAddress.Address가 있지만 사용되지 않는, 난 몰라 왜, 당신은 IP 클래스를 통해 정렬 또는 제어하지 않아도, 가장 좋은 방법은의 최대 값을 가진 부호없는 정수 (로 저장하는 경우부터 진수 표현 255.255.255.255에 동일은 0xffffffff.

    또한하여 IPAddress 클래스는 긴 인수를 받아들이는 생성자가 있습니다.

    그리고 VS 디버거 시각화에 따른하여 IPAddress 클래스 자체가 하나의 수 (없는 바이트 어레이)으로 내부 변수를 저장하는 것이다.

    MS SQL Server에서 저장 유닛 해결 방법에 대한 자세한 읽기 :

  10. ==============================

    10.나는 네 SMALLINT를 만들기로 어느 정도 성공했다 (또는 당신이 선호하는 데이터 타입의 정수 좀 작은 무엇이든) 열 한 - 각 옥텟 하나입니다. 그런 다음 (디스플레이 용) 문자 문자열로 그들을 함께 부수고보기를 할 수 있습니다 또는 당신은 모든 것을 서브넷 등으로 누가 결정하기 위해 간단한 연산자를 쓸 수 있습니다

    나는 네 SMALLINT를 만들기로 어느 정도 성공했다 (또는 당신이 선호하는 데이터 타입의 정수 좀 작은 무엇이든) 열 한 - 각 옥텟 하나입니다. 그런 다음 (디스플레이 용) 문자 문자열로 그들을 함께 부수고보기를 할 수 있습니다 또는 당신은 모든 것을 서브넷 등으로 누가 결정하기 위해 간단한 연산자를 쓸 수 있습니다

    그것은 (제공 당신이 적절한 색인을) 매우 빠르고도 정말 쉽게 쿼리 수 있습니다 (아무 문자열 조작!).

  11. ==============================

    11.IP 주소가 32 비트를 가지고 있기 때문에, 당신은 단지 숫자 값을 저장하는 LONG을 사용할 수 있습니까? 그것은 공간 낭비 VARCHAR를 사용하는 것과 같이하지 않을 것이다, 그러나 당신은 당신이 모든 시간을 사용하기 전에 다시는 IP로 다시 디코딩해야 할 것, 그리고 지연과 오버 헤드 비용은 가치가되지 않을 수도있다.

    IP 주소가 32 비트를 가지고 있기 때문에, 당신은 단지 숫자 값을 저장하는 LONG을 사용할 수 있습니까? 그것은 공간 낭비 VARCHAR를 사용하는 것과 같이하지 않을 것이다, 그러나 당신은 당신이 모든 시간을 사용하기 전에 다시는 IP로 다시 디코딩해야 할 것, 그리고 지연과 오버 헤드 비용은 가치가되지 않을 수도있다.

  12. ==============================

    12.MSSQL 데이터베이스에 IPv4 주소를 저장하기위한 가장 적절한 데이터 형식, int 형이다. 유일한 서투른 비트 정렬 / 표시하기 위해 다시 점 표기법으로 변환되고, 생성, 따라서 내가 추천보기 당신을위한 자동화이.

    MSSQL 데이터베이스에 IPv4 주소를 저장하기위한 가장 적절한 데이터 형식, int 형이다. 유일한 서투른 비트 정렬 / 표시하기 위해 다시 점 표기법으로 변환되고, 생성, 따라서 내가 추천보기 당신을위한 자동화이.

  13. ==============================

    13.나는 아마 VARCHAR 또는 문자와 함께 갈 것입니다.

    나는 아마 VARCHAR 또는 문자와 함께 갈 것입니다.

    그리고 15에 크기를 설정합니다.

  14. ==============================

    14.이 인용 :

    이 인용 :

  15. ==============================

    15.나는 초보자 @ PHP, SQL을 해요,하지만 난 SQL DB에 저장 뭔가 INT 값으로 변환하고 정수 (int)로 저장하는 것입니다 가장 빠른 길을 생각합니다.

    나는 초보자 @ PHP, SQL을 해요,하지만 난 SQL DB에 저장 뭔가 INT 값으로 변환하고 정수 (int)로 저장하는 것입니다 가장 빠른 길을 생각합니다.

    나는 PHP에서 기능을 사용 -

    function ip_convert() {
        $ip = $_SERVER['REMOTE_ADDR'];
        $intip = str_replace(".","0",$ip);
        return $intip;
    }
    

    그리고 난 그냥 제로 모든 점을 교체합니다. 그럼 난 .. SQL에서이 IP를 사용할 필요하다면 경우 ($ IP == ip_convert ())

    그러나 이것은 단지 당신이 PHP를 사용하는 경우.

  16. from https://stackoverflow.com/questions/1038950/what-is-the-most-appropriate-data-type-for-storing-an-ip-address-in-sql-server by cc-by-sa and MIT license