Ich wollte varchar(20)
verwenden, aber ich fragte mich, was ich tun sollte, wenn ich INT machen und stattdessen die Perioden streichen sollte. Was wäre besser und warum?Welchen Typ sollte ich IP-Adressen für MySQL speichern?
Antwort
Ich nehme an, Sie sind nur an IPv4-Adressen interessiert, nicht an IPv6.
Ich würde eine INT UNSIGNED
für die Spalte verwenden und dann INET_ATON
und INET_NTOA
verwenden, um zwischen der Textdarstellung und dem int-Wert hin und her zu konvertieren.
mysql> SELECT INET_ATON('192.168.10.50');
+----------------------------+
| INET_ATON('192.168.10.50') |
+----------------------------+
| 3232238130 |
+----------------------------+
1 row in set (0.00 sec)
mysql> SELECT INET_NTOA(3232238130);
+-----------------------+
| INET_NTOA(3232238130) |
+-----------------------+
| 192.168.10.50 |
+-----------------------+
1 row in set (0.00 sec)
store IPV4 als int unsigned
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-aton
http://dev.mysql.com/doc/refman/5.0/en/miscellaneous-functions.html#function_inet-ntoa
@ f00 - dann für v6? – ajreal
Interessant, ich wusste nicht, dass diese Funktionen existierten. –
@ajreal - binär oder x2 bigint unsigned –
Wenn Sie spart Platz wirklich besorgt sind, können Sie es in ein 4-Byte-int packen. Jeder Block einer IPv4-IP-Adresse kann 256 mögliche Werte haben, was zufälligerweise der Bereich eines einzelnen Bytes ist.
- Bearbeiten -> Was kann ich gerade beschrieben mit der MySQL-Funktionen f00 in seiner Antwort
jedoch verbunden getan wird, wird es als String speichert Zeit sparen ein bisschen Codierung. Ehrlich gesagt, es sei denn, Sie tun dies in einem sehr großen Maßstab, spielt die Optimierung aus einem dichteren Speicherformat keine Rolle.
- 1. Welchen Typ sollte myCustomDictionary.Values zurückgeben?
- 2. Welchen Mime-Typ sollte ich für den BASIC-Code verwenden?
- 3. API für Entwickler. Welchen Content-Typ sollte ich verwenden?
- 4. Welchen Typ sollte ich für ein 2-dimensionales Array verwenden?
- 5. Welchen Variablentyp sollte ich zum Speichern eines Bildes verwenden?
- 6. Welchen booleschen Typ sollte ich in iOS/Objective-C verwenden?
- 7. Welchen Fehlerwert sollte ich verwenden?
- 8. Welchen Datentyp sollte ich verwenden, um Geldwerte zu speichern?
- 9. Beim Speichern einer MySQL-Verbindungszeichenfolge in App.config für welchen Wert sollte die Eigenschaft providerName festgelegt werden?
- 10. Sollte ich Doppel-oder Dezimalstellen in Mysql-Datenbank speichern?
- 11. Welchen Typ sollte ich für einen Zeiger verwenden? ptrdiff_t oder void *?
- 12. Welchen Wortstammer sollte ich in nltk verwenden?
- 13. Welchen Wert des Backlogs sollte ich verwenden?
- 14. Skpsmpsmessage: welchen Server sollte ich für Google Mail verwenden
- 15. Welchen Speicher sollte ich für ein Outlook-Plugin verwenden?
- 16. Welchen STL-Container sollte ich für einen FIFO verwenden?
- 17. Welchen Namespace sollte ich für ein XML-Schema verwenden?
- 18. Welchen Datentyp sollte ich für IETF-Sprachcodes verwenden?
- 19. Welchen Doctype sollte ich für GWT 2.0 verwenden?
- 20. Welche Programmiersprache, welchen Algorithmus sollte ich für die Wörterbuchübersetzung verwenden?
- 21. Cross Compiling Ghostscript für Android, welchen Host sollte ich verwenden?
- 22. Welchen Header sollte ich für memcpy und realloc hinzufügen?
- 23. Welchen azure Service sollte ich für meine node.js App wählen?
- 24. Welchen Doctype sollte ich für eine mobile Website verwenden?
- 25. Welchen Windows SVN Server sollte ich verwenden?
- 26. Wo sind die Unterschiede zwischen XML und MySQL Datenbank? Welchen sollte ich verwenden?
- 27. Wo sollte ich eine Datenbankverbindungszeichenfolge speichern?
- 28. MySQL Primärschlüssel Spalte Typ für große Tabellen
- 29. Warum sollte ich Fremdschlüssel in Mysql setzen
- 30. Wo sollte ich Datenbankdateien speichern?
Es hängt davon ab, welche Operationen Sie an den Daten ausführen werden. – zerkms
Sie können nicht einfach die Perioden abzustreifen, oder Sie müssten jedes Oktett mit Nullen auffüllen, so dass sie alle 3 Zeichen lang sind. Ansonsten würden die IPs 192.168.45.5 und 192.168.4.55 gleich aussehen. Wenn Leute vorschlagen, ein int (32 Bit) zu verwenden, meinen Sie, dass Sie jedes Oktett (jeweils 8 Bits) nehmen und sie zu einem einzigen Int zusammenfassen. –