Avatar billede nicklasb Nybegynder
23. november 2004 - 17:58 Der er 9 kommentarer og
1 løsning

Datatype til binær data (IP-adresser)

Hej,

Hvordan gemmer jeg beslastnings- og performance-mæssigt bedst mine binære strenge?

For CHAR(36) BINARY er åbenbart ikke længere hvad man skulle tro den var til - binært data (jf. http://dev.mysql.com/doc/mysql/en/BINARY_VARBINARY.html ).

1. Hvilken datatype skal jeg vælge? (Det er IP-adresser jeg skal gemme - så jeg ved det er 36 tegn hver gang)?

2. Er der overhoved noget at vinde ved at gemme det som binært - eller kan jeg lige så godt gemme det som plain text?

Grunden til jeg ville gemme det som binært var for hurtigere og lettere at kunne gruppere, sortere og tælle på dataen. Er det en misforståelse at der er noget at vinde her?

På forhånd mange tak for svarene!
/Nicklas B.
Avatar billede arne_v Ekspert
23. november 2004 - 18:36 #1
INTEGER måske ??
Avatar billede nicklasb Nybegynder
23. november 2004 - 21:59 #2
Jeg må ærligt indrømme at jeg ikke er mester i SQL endnu, så du må hellere hjælpe mig lidt mere på vej, så jeg ikke får valgt forkert!, skønt jeg sætter pris på din hjælp ind til videre, da.

Hvilken type INTEGER skal jeg vælge? Og skal der bare stå 36 i længden?

Men er integer ikke til tal generelt? Hvis ikke det kan gemmes binært kan jeg vel lige så godt gemme IP'en i en TEXT?
Avatar billede arne_v Ekspert
23. november 2004 - 22:13 #3
Hvis du vil have en nem løsning så gemmer du den som VARCHAR(15).

Men hvis du vil have den mest kompake form så er det en INTEGER.

(n) er stort set ligegyldigt for integers.

En IP adresse består faktisk af 4 bytes og en INTEGER indeholder 4 bytes, så
det matcher godt nok.

Du kan så omregne til numerisk form i din applikation (PHP/ASP/C#/Java/whatever).
Avatar billede nicklasb Nybegynder
23. november 2004 - 22:27 #4
undskyld, men forstår det desværre ikke helt endnu, og forstår også godt hvis du ikke gider forklare det yderligere, men ville være glad for en uddybning eller et link hvor jeg eventuelt kunne læse mere.

Når du snakker INTEGER er det det samme som INT ikk? (for lige at være sikker)
Er det forkert forstået at den kan indeholde tal op til 2147483647? Hvordan får jeg en ip ned i den?

Det jeg gjorde tidligere var blot at konvertere hver byte til den binære 8bit integer.
Altså 36bit i alt.

Tror jeg har fået kludret godt rundt i det! :S
Avatar billede arne_v Ekspert
23. november 2004 - 22:48 #5
INTEGER og INT er det samme
Avatar billede arne_v Ekspert
23. november 2004 - 22:50 #6
En IP adresse består af 4 tal nnn.nnn.nnn.nnn hvor nnn=0..255

Hvis vi tager en IP adresse aaa.bbb.ccc.ddd så kan den faktisk
stoppes ned i en unsigned integer ved at transformere som:

intvalue = aaa*256*256*256 + bbb*256*256 + ccc*256 + ddd
Avatar billede arne_v Ekspert
23. november 2004 - 22:51 #7
Hvis du er bit haj så:

intvalue = (aaa << 24) | (bbb << 16) | (ccc << 8) | ddd

og så har man tilmed ikke problemer med signed/unsigned.
Avatar billede nicklasb Nybegynder
24. november 2004 - 10:39 #8
du skal have mange tak, men intet svar?
Avatar billede arne_v Ekspert
24. november 2004 - 10:42 #9
Jeg vil da meget gerne ligge et svar

Men har du fået afklaret problem stillingen ?
Avatar billede nicklasb Nybegynder
24. november 2004 - 11:00 #10
ja, ellers havde jeg slet ikke sluppet dig! ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB

Unik System Design A/S

QA Engineer

Netcompany A/S

IT Consultant

Operate Technology A/S

PHP-udvikler til Drupal