, wenn ich dies tue
1- ich würde eine neue Spalte
ALTER TABLE table_name ADD ip_long bigint(20) unsigned;
2- den PHP-Code ausführen erstellen ip konvertieren -> iplong und aktualisieren (setzen) Sie den Long-Wert in der neuen Spalte
$query ="SELECT id,ip from table";
while ($row=mysqli_fetch_assoc($result)){
$ip2long=ip2long($row['ip']);
$id=$row['id'];
$update="UPDATE table SET ip_long='$ip2long' WHERE id='$id'";
}
echo "conversion completed";
3.1 stellen Sie sicher, dass Ihre Website bereit ist, IP-Adresse als LONG zu behandeln: bereiten Sie den Mechanismus vor, den Sie verwenden werden, um neuen Wert zu verwenden (lang), könnte ein paar Zeilen auskommentieren, eine Bibliotheksdatei ersetzen dass enthält einige Methoden ... etc
3,2 - Drop alte Spalte ip, und benennen Sie neue Spalte ip_long zu ip
ALTER TABLE table_name DROP COLUMN ip;
ALTER TABLE table_name CHANGE ip_long ip bigint(20) unsigned;
3.2 Hinweis: Für doppelte Sicherheit können Sie nur alte Spalte (ip) in etwas anderes umbenennen (ip_old) und behalten, falls der Prozess in keiner Phase erfolgreich war, oder Sie mussten für alle auf das normale IP-Format zurückkehren Deshalb können Sie unter Anweisung exeucte die Spalte umbenennen:
ALTER TABLE table_name CHANGE ip ip_old varchar(15); --replace varchar(15) with actual column definition ex: varchar(15) not null... etc.
, wenn Sie sicher sind, der Prozess in Ordnung ist und Sie nicht mehr alte IP benötigen, ist es einfach fallen
ALTER TABLE table_name DROP COLUMN ip_old;
Hinweis: Es wird empfohlen, die letzten 2 Anweisungen auf demselben P auszuführen HP Seite oder sogar auf einer Shell-Sitzung (wenn möglich), um sicherzustellen, dass keine Fehler für Benutzer erscheint, ex: Spalte nicht gefunden 'IP'
extrahieren Sie die 2 Spalten zu einem CSV. Erstellen Sie eine App in C# oder Java, um die Datei zu lesen und schreiben Sie die 3 Spalten (naja, wirklich nur 2) auf eine zweite csv aus. Dann LOAD DATA von infil die zweite csv in einige Stub-Tabelle .. Welche enthält übrigens die ID und Ihre neue Zeichenfolge. Dann machen Sie ein "update with a join" -Muster zurück zu Ihrer realen Tabelle – Drew
Während es nichts Schlimmes mit Drews Antwort oben ist, persönlich würde ich mit einem Shell-Skript gehen und würde es in IP-Gruppen tun.Auf diese Weise müssen Sie, wenn etwas schief geht, nicht von Anfang an neu starten. 10 Millionen Datensätze brauchen Zeit, egal was Sie tun. Sie müssen darüber nachdenken, wie Sie sich schnell von einem Fehler erholen können und eine PHP-Schleife wird bei dieser Datenmenge nicht gut funktionieren. – Tigger
ok, ich werde versuchen, dass –