MySQL/memo

Last-modified: 2010-10-21 (木) 18:40:37

MySQLにCSVからのデータを挿入する方法

参考サイト

 http://tomo.ac/goodstream/database/mysql/linux/tips.htm#データをCSV(Excel)で入出力する方法
 http://antas.jp/blog/kinokuni/2006/10/mysql41load_data.html

実際のコード

 mysql> set character set sjis;
 mysql> load data (local) infile "/tmp/dump.csv" into table tablename
     fields terminated by ',' enclosed by '"'
     lines terminated by '\r\n';

注意点

※encloses by '"'は、データが" "で囲まれているときの指定。
最後の改行コードの指定がないと、エラーになってしまう
※上記の文を実行したとき、データベースのキャラクターセットが作ったファイルと異なると、エラー

対処法)
 alter database データベース名 character set cp932;
 として、変更すれば、普通に代入できる。

 一応、テーブルの文字セットが同じこともチェック
 チェックは、

show create database データベース名\G
show create table テーブル名\G

 でチェックできる。

エクスプローラからDB関連のファイル(frmやopt)をコピーした場合の挙動

 ・結論を先に言うと、対応するDB関連ファイルをコピーしても、
  DBをバックアップしたことにはならないのではないだろうか?
  (引き続き・要・調査)

 ・エクスプローラからデータをコピーすると、
  show databasesや、show tables;を使ったときに
  コピーしたDB名やテーブル名が表示される。
  しかし、アクセスすると「存在しない」というエラーが出る

 ・単純に.frmをコピーしたものには「存在しない」エラー

 ・データベースのフォルダ名を変えると、「存在しない」エラー

 ・逆にコピーしたものでも、テータベース名とテーブル名が
  双方、元のものと同一であれば、アクセスすることが可能になる。
  →ibdata1と照合しているためと思われる。(InnoDBの場合)
   (ibdata1:テーブルデータやインデックスの保存)