Wir verwenden ein binäres Feld (16), um IP-Adressen zu speichern. Wir tun dies, da es sowohl IPv4- als auch IPv6-Adressen enthalten kann und einfach mit der .NET IPAddress-Klasse verwendet werden kann.
Ich habe jedoch die folgende SQL-Funktion erstellt, um die binäre Adresse für Reporting-Zwecke in die IP-Adress-Zeichenfolge zu konvertieren.
%Vor%Im Moment, wenn das 5 Byte 0 ist, nehme ich an, dass es eine IPv4-Adresse ist. Ist das eine sichere Annahme? Ist es besser, alle verbleibenden Bytes auf Nullen zu überprüfen oder gibt es einen besseren Weg?
BEARBEITEN Entfernen unnötiger Cast
Ich würde sagen, Sie sollten auch die Adressfamilie speichern, entweder in Ihrem Byte-Array oder als separate Spalte. Wenn Sie 16 Byte an den IPAddress-Konstruktor übergeben, wird er als IPv6-Adresse erstellt. Daher müssen Sie den Code überprüfen, um die Adressfamilie zu bestimmen. Es scheint viel einfacher zu sein (und sich nicht auf Annahmen über die Bytes einer IPv6-Adresse zu verlassen), um diese Informationen direkt zu speichern.
Oder verwenden Sie eine varbinary (16), die Sie dann prüfen können, die Länge von (Länge = 4 = & gt; IPv4-Adresse)
Tags und Links sql sql-server