Mysql Warnings
Henk Strobel
- datenbank
Hallo,
ich habe ein simples MySQL-Problem, für das es wahrscheinlich eine gaaaaanz einfache Lösung gibt, die ich allerdings nicht finde.
Frage: wenn mir der mysql-monitor nach dem ausführen eines befehls anzeigt, das es Warnungen gegeben hat, wo finde ich diese Warnungen bzw. wie kann ich Sie mir anzeigen lassen?
Auch wenn ich mysqld mit "-W" starte, finde ich in der .err-Datei nix dementsprechendes.
Danke im voraus
Henk
Hallo nochmal:
Ergänzung: Vielleicht hat ja auch jemand eine Idee, wie es zu solch einer Ausgabe kommt:
mysql> LOAD DATA LOCAL INFILE 'e:/messeplaene/autocad/plaene/katalog_009_0.csv'
INTO TABLE halle\_09
FIELDS TERMINATED BY ':' LINES TERMINATED BY '\n' (nummer
, koords
);
Query OK, 127 rows affected (0.01 sec)
Records: 202 Deleted: 0 Skipped: 75 Warnings: 75
Im Klartext:
Es werden nur 127 datensätze aus der Datei importiert, die restlichen 75 werden aus irgendwelchen Gründen geskippt, und das reproduzierbar auf unterschiedlichen Servern. die .csv-Datei sieht soweit gut aus...
Gruß Henk
Hi,
mysql> LOAD DATA LOCAL INFILE
naheliegende Vermutung:
Deine Importdatei enthält Feldinhalte, die nicht in die entsprechenden Felder Deiner Tabelle passen (Feldlängen von String? Wertemengenbereiche von Zahlen?) und abgeschnitten wurden.
Viele Grüße
Michael
Hallo Michael,
Deine Importdatei enthält Feldinhalte, die nicht in die entsprechenden Felder Deiner Tabelle passen (Feldlängen von String? Wertemengenbereiche von Zahlen?) und abgeschnitten wurden.
Leider ist es das nicht.
Es werden aus der ASCII-Datei genau die ersten 127 Zeilen importiert. Die restlichen nicht mehr.
Was mich dabei irritiert, ist die Zahl 127 (=2^7-1). Soll das wirklich Zufall sein?
Gruß Henk
Es werden aus der ASCII-Datei genau die ersten 127 Zeilen importiert. Die restlichen nicht mehr.
Dann solltest Du die Importdatei nochmals ab Zeile 128 genauer unter die Lupe nehmen, am besten mit einem Editor der Sonderzeichen auch darstellt, oder mit einem Hex-Editor. Es kann durchaus sein, daß da irgendwas 'versteckt' ist, das Du so auf den ersten Blick nicht siehst.
Was mich dabei irritiert, ist die Zahl 127 (=2^7-1). Soll das wirklich Zufall sein?
Hmm, ich denke, Du läßt Dich von dieser Zahl ein bißchen in die Irre führen. Aber versuch mal, die ersten Zeilen der csv-Datei zu löschen. Wenn dann weniger Datensätze als 127 importiert werden, dann liegts definitiv an den Daten, wenn nicht, dann ist anscheinend wirklich bei 127 Schluß, was ich nicht glaube. Es kann aber auch sein, daß Du irgendwann Datensätze importierst, welche einen doppelten Primary Key generieren würden, und von daher diese Zeilen übersprungen werden.
Übrigens, lt. http://www.mysql.com/doc/L/O/LOAD_DATA.html werden die Warnings nirgends gespeichert, allein die Tatsache, daß welche aufgetreten sind, zeugt davon, daß nicht alle Daten importiert wurden. Das finde ich ziemlich unangenehm, sogar Access ist da beim Import aussagekräftiger.
Grüße
Klaus
Hallo Klaus,
Fehler gefunden: Ich hatte für die primäre (auto_increment)-Spalte als Datenformat "TINYINT" angegeben (Frag mich nicht, warum). Da ist dann natürlich bei 128 Schluss.
Kleine Ursache, große Wirkung, hier: stundenlange Fehlersuche ;-)
Viele Grüße und vielen dank auch an Michael!
Henk
Hi Henk,
Fehler gefunden:
Glückwunsch.
Ich hatte für die primäre (auto_increment)-Spalte
Ich wollte, ich wüßte, wieso das so viele Leute machen (autoincrement-Spalten verwenden, meine ich).
Wie fügt man denn in eine solche Tabelle sinnvoll Datensätze ein? Ich meine damit "mit SQL".
Was dann nämlich schon mal nicht geht, ist
CREATE TABLE dummytable AS
SELECT *
FROM mytable
WHERE bedingung;
UPDATE dummytable
SET wert
WHERE bedingung;
INSERT INTO mytable
SELECT *
FROM dummytable;
also das Erzeugen abgeleiteter Teilmengen. ("klonen")
Statt dessen muß ich in diesem Fall die AutoIncrement-Spalte explizit weglassen, d. h. die komplette Feldliste ohne diese eine Spalte angeben ... das finde ich äußerst lästig (und vor allem änderungsunfreundlich, falls gespeicherter Code und nicht nur im Dialog mal schnell eingetippt).
Primärschlüssel versuche ich üblicherweise aus der relationalen Zerlegung meiner Daten abzuleiten.
Wenn sich da nichts aufdrängt, dann bringt mir ein künstlicher autoincrement-Wert nur in wenigen Fällen wirklich etwas, denke ich.
Was übersehe ich dabei?
Viele Grüße
Michael