sql >> Database teknologi >  >> RDS >> Mysql

Sådan gemmer du en IP i mySQL

Jeg vil foreslå, at du ser på, hvilken type forespørgsler du vil køre for at beslutte, hvilket format du bruger.

Kun hvis du har brug for at trække ud eller sammenligne individuelle oktetter, skal du overveje at dele dem op i separate felter.

Ellers skal du gemme det som et 4 byte heltal. Det har også den bonus, at du kan bruge den indbyggede MySQL INET_ATON() og INET_NTOA() funktioner.

Ydeevne vs. plads

Lagring:

Hvis du kun skal understøtte IPv4-adresser, kan din datatype i MySQL være en UNSIGNED INT som kun bruger 4 bytes lagerplads.

For at gemme de individuelle oktetter behøver du kun at bruge UNSIGNED TINYINT datatyper, ikke SMALLINTS , som ville bruge op til 1 byte hver af lagerplads.

Begge metoder ville bruge lignende lagring med måske lidt mere til separate felter for nogle overhead.

Mere info:

Ydeevne:

Brug af et enkelt felt vil give meget bedre ydeevne, det er en enkelt sammenligning i stedet for 4. Du nævnte, at du kun vil køre forespørgsler mod hele IP-adressen, så der skulle ikke være behov for at holde oktetterne adskilt. Ved hjælp af INET_* funktionerne i MySQL udfører konverteringen mellem tekst- og heltalsrepræsentationerne én gang til sammenligningen.



  1. Simuler lagfunktion i MySQL

  2. Fuld liste over tegnsæt understøttet af MariaDB

  3. Entity Framework + MySQL - Hvorfor er ydeevnen så forfærdelig?

  4. Måder at migrere SQL Server Database til Azure SQL Database