Ich glaube nicht, dass dies eine Programmierfrage ist, also werde ich sie hier stellen -
Beim Lesen des Buches „High Performance MySQL“ habe ich etwas über die CSV-Engine gelesen. Der Absatz lautet:
Die CSV-Engine kann Dateien mit kommagetrennten Werten (CSV) als Tabellen behandeln, unterstützt jedoch keine Indizes dafür. Mit dieser Engine können Sie Dateien in die Datenbank und aus ihr heraus kopieren, während der Server läuft. Wenn Sie eine CSV-Datei aus einer Kalkulationstabelle exportieren und im Datenverzeichnis des MySQL-Servers speichern, kann der Server sie sofort lesen. Wenn Sie Daten in eine CSV-Tabelle schreiben, kann sie ein externes Programm ebenfalls sofort lesen. CSV-Tabellen sind besonders nützlich als Datenaustauschformat und für bestimmte Arten der Protokollierung.
Aus diesem Absatz erkenne ich, dass ich eine CSV-Datei in das Datenverzeichnis der Datenbank kopieren kann und sie als lesbare Tabelle angezeigt werden sollte. Wenn ich jedoch eine Test-CSV-Datei in das Verzeichnis kopiere, wird sie nicht als Tabelle angezeigt. Ich kann nicht darauf zugreifen.
Ich verwende auch MySQL 5.5
Weiß jemand, warum das nicht funktioniert oder was ich falsch mache?
Antwort1
Ich habe mich entschieden, dies auf meinem MySQL-Server auszuprobieren, um herauszufinden, wo das Problem liegt. Es scheint, dass Sie die Tabelle in MySQL erstellen müssen (mit der Angabe „engine=csv“), damit die Tabelle ordnungsgemäß zu MySQL hinzugefügt wird und die Metadaten der Tabellenfelder nachverfolgt werden. Bei meinen Tests konnte ich MySQL nicht dazu bringen, die CSV-Datei zu kennen, ohne zuerst „create table“ zu verwenden.
Beispiel:
- Erstellen Sie eine neue CSV-Datei mit dem Namen foo, in diesem Beispiel eine Spalte mit dem Namen „i“ für eine Ganzzahl und „c“ für ein Zeichenfeld:
CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
- foo.frm, foo.CSM, foo.CSV werden in /var/lib/mysql/data/dbname erstellt. Sie werden feststellen, dass foo.CSV null Byte lang ist.
Kopieren Sie Ihre vorhandene CSV-Datei (die dem für die Tabelle definierten Format entspricht) in foo.CSV:
1,"FOOBAR" 2,"FOOBAZ" 3,"BARBAZ"
In MySQL sollte select * from foo das folgende Ergebnis erzeugen:
mysql> select * from foo; +---+--------+ | i | c | +---+--------+ | 1 | FOOBAR | | 2 | FOOBAZ | | 3 | BARBAZ | +---+--------+ 3 rows in set (0.00 sec)