2016-07-10 8 views
0

Ich wollte wissen, wie man ein INET6_ATON Ergebnis zu MYSQL speichert. Also habe ich den MYSQL-Hilfeartikel gelesen und es heißt, ich sollte VARBINARY(16) verwenden. Aber jetzt, mit einer IPv4 -Address hat es den Inhalt 0x7F000001 und ich bin nicht in der Lage, Ergebnisse mit SQL zu erhalten. Meine Idee war es, CHAR zu verwenden, aber in diesem Fall weiß ich nicht, was die maximale Länge eines INET6_ATON -Ergebnisses ist.Welcher Typ hat INET6_ATON?/Maximale Länge von INET6_ATON?

Also: Wie bekomme ich MYSQL-Ergebnisse, wenn das Ergebnis als VARBINARY gespeichert wird? Oder andersherum: Was ist die maximale Länge eines INET6_ATON -Ergebnisses?

Ich Übersetzung der IP-Adressen mit diesem SQL-Statement:

SELECT HEX(INET6_ATON("FE80:0000:0000:0000:0202:B3FF:FE1E:8329")) 

Vielen Dank.

+0

Das sind 16 Bytes .... XX ist 1 Byte – Drew

+0

@Drew Bedeutet, ich sollte 'CHAR (32)' verwenden? – HelloToYou

Antwort

0

Beachten Sie, dass die unten lesbare Spalte für den menschlichen Verzehr gedacht ist.

Die inet6 Spalte enthält außerhalb des Bereichs Zahlen sollte ich sagen, um viel Sinn für Menschen. Goobly goop, wenn Sie so wollen.

create table myFriends 
( id int auto_increment primary key, 
    friendlyName varchar(100) not null, 
    inet6 binary(16) not null, 
    humanReadable char(32) not null 
); 

insert myFriends (friendlyName,inet6,humanReadable) values 
('Kathy Higgins',INET6_ATON("FE80:0000:0000:0000:0202:B3FF:FE1E:8329"),HEX(INET6_ATON("FE80:0000:0000:0000:0202:B3FF:FE1E:8329"))); 

select * from myFriends; 
+----+---------------+------------------+----------------------------------+ 
| id | friendlyName | inet6   | humanReadable     | 
+----+---------------+------------------+----------------------------------+ 
| 1 | Kathy Higgins | ■Ç  ☻☻│ ■▲â) | FE800000000000000202B3FFFE1E8329 | 
+----+---------------+------------------+----------------------------------+ 

FE80 steht für 2 Bytes. FE 80. Hexadezimal. Jedes Byte reicht von 00 bis FF (255).

Überprüfen Sie meine Antwort Here auf verschiedenen Formaten. Oft werden in einer Tabelle fast doppelte Informationen verwendet.

+0

Was ist effizienter für MYSQL? – HelloToYou

+0

Effizienter ist das varbinary (16), denn das wäre ein vernünftiger Join. Verdünner ist besser. Es hängt davon ab, in welchem ​​Kontext Sie es für Funktionen verwenden, da es sich auf Ihre Nützlichkeit bezieht. – Drew

+0

Was ist mit IPv4? Zum Beispiel funktioniert 'SELECT * FROM myFriends WHERE ipv4 = 0x7F000001' nicht. – HelloToYou