[108]さくらVPS、CSV、インポート

MySQLでCSVファイルをインポートする

をやってみます。

 

ファイルの準備

まずは適当なデータをcsvで用意する。郵便番号データを使います。

Linuxであれば/tmp/以下のディレクトリに入れておくのが適切。

ただしここで気をつけなければいけないのは、ファイルとディレクトリのパーミッションだ。Linuxは、この辺りが厳密なので注意が必要だ。フルパスで指定するファイルの上位ディレクトリ全てのパーミッション設定を変更しておく必要がある。。。。と。

なので、問題が無ければ、全ユーザに対してアクセス権を開放してしまう。これで問題なくインポートができるようになる。

すなわち、

# chmod 777 /tmp

 

MySQLへインポート

まずは、インポートするデータにあわせてテーブルを作っていく。

ああ、やっぱテーブルはあらかじめ作る必要あるのね。。そりゃそうだ。。

では、まじめに作成。。。

# mysql -p    もしくは、、、、、

# mysql -u root -p

で次に設定したpasswdを入力

#y*\h**h/r*2*16/L0+*5(一応、ガード!)

指定したユーザー名とパスワードでMySQLサーバへ接続が成功すれば、下記のような画面となりコマンドまたはSQL文の入力待ちとなります。

 

データベースの作成

データベースを作成します。CREATE DATABASE文を使います。基本書式は次の通りです。

mysql>create database yubin20160807;

データベースの確認は、

mysql>show databases;

Capture_2016_08_07_17_58_25_605

で、databaseを選択して、、

# use yubin20160807;

で、次は、テーブル作成

CREATE TABLE 2016_yubin_num(
yubin_num text,
kana_ken text,
kana_siku text,
kana_juusyo text,
kanji_ken text,
kanji_siku text,
kanji_juusyo text
);

できたかな????

Capture_2016_08_07_18_08_26_203

一応、DESCRIBEコマンドで確認する。

mysql> describe 2016_yubin_num;

Capture_2016_08_07_18_12_01_111

OK、テーブルもできたようだ!

では、肝心のcsvファイルのインポートをLOAD DATAを使って行う。ファイル名を指定している””の中は、フルパスを使ってファイルを指定してもいい。

で、CSVファイルの置き場所だけど、、、インストールしたmysqlは「/var/lib/mysql」で動いているよう。。。なので、この1つ上の../tmpに行ってそれをとってきてもらうには、、、

Linuxで「/var/lib/mysql」を作成し、tmpディレクトリの中にファイルを置く、、、、私の場合、、「../tmp/KEN_ALL_20160807.CSV」、、、かな。。。で、

mysql> LOAD DATA INFILE “../tmp/KEN_ALL_20160807.CSV”
    -> INTO TABLE 2016_yubin_num FIELDS TERMINATED BY “,”
    -> LINES TERMINATED BY “\r\n”;

結果、、、

Capture_2016_08_07_18_40_47_654

読めたかな?????

mysql> select * from 2016_yubin_num;

うーーーん。読めたけど、、、文字化け。。。

ここで、文字化けが起きているのならば、ファイルの文字コードとMySQLの文字コードを確認して同じものを指定する。csvファイルの文字コード変換は、テキストエディターの”サクラエディタ”を使用した。

で、

Capture_2016_08_07_18_50_15_934

UTF-8にしないといけないので、変換して再度転送!!!

Capture_2016_08_07_18_50_34_187

もう1回ロードします。。。。。。

mysql> LOAD DATA INFILE “../tmp/KEN_ALL_20160807.CSV”
    -> INTO TABLE 2016_yubin_num FIELDS TERMINATED BY “,”
    -> LINES TERMINATED BY “\r\n”;

入ったみたいなので、確認してみるか。。。。。

mysql> SELECT * FROM 2016_yubin_num WHERE yubin_num=‘1210823’;

Capture_2016_08_07_19_02_57_39

OK!!みたいね!!!!!!!

やったー