sql >> Databasteknik >  >> RDS >> Mysql

Hur man lagrar en IP i mySQL

Jag skulle föreslå att du tittar på vilken typ av frågor du kommer att köra för att bestämma vilket format du använder.

Endast om du behöver dra ut eller jämföra enskilda oktetter måste du överväga att dela upp dem i separata fält.

Annars lagrar du det som ett heltal på 4 byte. Det har också bonusen att du kan använda MySQL inbyggda INET_ATON() och INET_NTOA() funktioner.

Prestanda kontra utrymme

Lagring:

Om du bara ska stödja IPv4-adresser kan din datatyp i MySQL vara en UNSIGNED INT som bara använder 4 byte lagringsutrymme.

För att lagra de individuella oktetterna behöver du bara använda UNSIGNED TINYINT datatyper, inte SMALLINTS , vilket skulle använda upp 1 byte vardera av lagringsutrymme.

Båda metoderna skulle använda liknande lagring med kanske något mer för separata fält för vissa overhead.

Mer information:

Prestanda:

Att använda ett enda fält kommer att ge mycket bättre prestanda, det är en enda jämförelse istället för 4. Du nämnde att du bara kommer att köra frågor mot hela IP-adressen, så det borde inte finnas något behov av att hålla åtskilda oktetter. Använda INET_* funktionerna i MySQL gör omvandlingen mellan texten och heltalsrepresentationerna en gång för jämförelsen.



  1. Vad betyder operatorn :=i mysql?

  2. Den första HTML-raden visas inte

  3. Ska jag använda makron eller VBA-kod?

  4. Hur man skapar lagrad procedur i MySQL