wake-up-neo.com

Welcher MySQL-Datentyp soll für eine IP-Adresse verwendet werden?

Mögliches Duplikat:
Wie speichere ich eine IP in mySQL?

Ich möchte die IP-Adresse aus $_SERVER['REMOTE_ADDR'] Und einigen anderen $_SERVER Variablen erhalten. Welcher Datentyp ist der richtige dafür?

Ist es VARCHAR(n)?

91
ComFreek

Da IPv4-Adressen 4 Byte lang sind, können Sie ein INT (UNSIGNED) mit genau 4 Byte verwenden:

`ipv4` INT UNSIGNED

Und INET_ATON und INET_NTOA um sie zu konvertieren:

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

Für IPv6-Adressen können Sie stattdessen ein BINARY verwenden:

`ipv6` BINARY(16)

Und benutze PHPs inet_pton und inet_ntop zur Umrechnung:

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

Sie haben zwei Möglichkeiten (für eine IPv4-Adresse):

  • a varchar(15), wenn Sie die IP-Adresse als Zeichenfolge speichern möchten
    • Zum Beispiel 192.128.0.15
  • ein integer (4 Bytes), wenn Sie die IP-Adresse in eine Ganzzahl konvertieren
    • 3229614095 Für die zuvor verwendete IP


Die zweite Lösung benötigt weniger Speicherplatz in der Datenbank und ist wahrscheinlich die bessere Wahl, auch wenn sie einige Manipulationen beim Speichern und Abrufen der Daten erfordert (Konvertieren von/in einen String) .

Informationen zu diesen Manipulationen finden Sie in den Funktionen ip2long() und long2ip() auf der PHP-Seite oder inet_aton() und inet_ntoa() auf der MySQL-Seite.

46
Pascal MARTIN

Für IPv4-Adressen können Sie VARCHAR verwenden, um sie als Zeichenfolgen zu speichern, aber auch, um sie als lange Ganzzahlen INT(11) UNSIGNED zu speichern. Sie können die Funktion INET_ATON() von MySQL verwenden, um sie in eine Ganzzahldarstellung zu konvertieren. Dies hat den Vorteil, dass Sie einfache Vergleiche mit ihnen durchführen können, wie z. B. BETWEEN Abfragen

INET_ATON () MySQL-Funktion

5