これはプログラミングに関する質問ではないと思うので、ここで質問します。
高性能 MySQL という本を読んでいて、CSV エンジンについて読みました。その段落には次のように書かれています。
CSV エンジンは、カンマ区切り値 (CSV) ファイルをテーブルとして扱うことができますが、それらのインデックスはサポートしていません。このエンジンを使用すると、サーバーの実行中にデータベースにファイルをコピーしたり、データベースからファイルをコピーしたりできます。スプレッドシートから CSV ファイルをエクスポートして、MySQL サーバーのデータ ディレクトリに保存すると、サーバーはすぐにそれを読み取ることができます。同様に、CSV テーブルにデータを書き込むと、外部プログラムはすぐにそれを読み取ることができます。CSV テーブルは、データ交換形式として、また特定の種類のログ記録に特に役立ちます。
この段落から私が得たのは、.CSV ファイルをデータベースのデータ ディレクトリにコピーすると、読み取り可能なテーブルとして表示されるはずだということです。ただし、テストの .csv ファイルをディレクトリにコピーすると、テーブルとして表示されません。アクセスできません。
私もMySQL 5.5を使用しています
なぜこれが機能しないのか、または私が何を間違っているのか知っている人はいますか?
答え1
問題が何なのかを調べるために、MySQL サーバーでこれを試してみることにしました。どうやら、テーブルが適切に MySQL に追加され、テーブル フィールドのメタデータが追跡されるようにするには、MySQL でテーブルを作成する必要があるようです (engine=csv を指定)。私のテストでは、最初に「create table」を使用しないと、MySQL に csv ファイルを認識させることができませんでした。
例:
- この例では、整数用に「i」という名前の列と文字フィールド用に「c」という名前の列を含む、foo という名前の新しい csv を作成します。
CREATE TABLE foo (i int not null, c char(10) not null) engine=csv;
- foo.frm、foo.CSM、foo.CSV は /var/lib/mysql/data/dbname に作成されます。foo.CSV はゼロバイトであることがわかります。
既存の csv (テーブルに定義された形式に一致するもの) を foo.CSV にコピーします。
1,"FOOBAR" 2,"FOOBAZ" 3,"BARBAZ"
mysql では、select * from foo は次の結果を生成します。
mysql> select * from foo; +---+--------+ | i | c | +---+--------+ | 1 | FOOBAR | | 2 | FOOBAZ | | 3 | BARBAZ | +---+--------+ 3 rows in set (0.00 sec)