アプリ版:「スタンプのみでお礼する」機能のリリースについて

必要に駆られたのでMySQLについて勉強しているのですが、
ファイル読み込みで問題が起こり、詰まってしまっています。

MySQL上で自作したsampledb内にテーブルprefectureを作成し、
そのテーブル内にPrefecture.csvファイル(文字コードshiftJIS)からデータを入力しようと
しているのですが、最初の一件しかテーブルに格納されず、他のデータが入らないのです。
以下に入力したクエリ文を掲載します。

create database sampledb default character set sjis

create table Prefecture(PREF_CD INT(3),PREF_NAME VARCHAR(10),PRIMARY KEY(PREF_CD))

LOAD DATA INFILE "Prefecture.csv"
-> INTO TABLE Prefecture FIELDS TERMINATED BY","
-> LINES TERMINATED BY"\r\n";
Query OK, 1 row affected, 1 warning (0.08 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 1

select * from prefecture
+---------+-----------+
| PREF_CD | PREF_NAME |
+---------+-----------+
|       1 | 北海道
2 |
+---------+-----------+
1 row in set (0.00 sec)

Prefecture.csvについてはこちらのサイト仕様上添付できませんでしたが、
1,北海道
2,青森県
3,岩手県
.
.
.(以下省略)
のように、47都道府県の番号と地名を並べたものです。


独力では解決法を見出せません。
どうかご助力お願いします。

A 回答 (1件)

正直これだけの情報ではなんとも・・・・。

可能性としてはラインターミネーターが\r\nじゃなくて\nなので全部が1行と解釈されて最初の2列だけに反応しているとかかね。
↓の2つを試してみてその結果を教えてもらえますか。\r\nを\nと\rにそれぞれしたものです。

1.
LOAD DATA INFILE "Prefecture.csv"
-> INTO TABLE Prefecture FIELDS TERMINATED BY ","
-> LINES TERMINATED BY "\n";

2.
LOAD DATA INFILE "Prefecture.csv"
-> INTO TABLE Prefecture FIELDS TERMINATED BY ","
-> LINES TERMINATED BY "\r";

この回答への補足

ご回答ありがとうございます。

お答にありました2つについて、試してみましたところ
以下のような結果が出ました。

・1つめ
mysql> LOAD DATA INFILE"Prefecture.csv"
-> INTO TABLE Prefecture FIELDS TERMINATED BY ","
-> LINES TERMINATED BY "\n";
Query OK, 1 row affected, 1 warning (0.34 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 1

mysql> select * from Prefecture;
+---------+-----------+
| PREF_CD | PREF_NAME |
+---------+-----------+
| 1 | 北海道
2 |
+---------+-----------+
1 row in set (0.00 sec)

・2つめ
mysql> LOAD DATA INFILE"Prefecture.csv"
-> INTO TABLE Prefecture FIELDS TERMINATED BY ","
-> LINES TERMINATED BY "\r";
Query OK, 1 row affected, 1 warning (0.25 sec)
Records: 1 Deleted: 0 Skipped: 0 Warnings: 1

mysql> select * from Prefecture;
+---------+-----------+
| PREF_CD | PREF_NAME |
+---------+-----------+
| 1 | 北海道
2 |
+---------+-----------+
1 row in set (0.00 sec)

以上の通り、問題の解決には至りませんでした。
申し訳ありませんが、再度お力添えをお願いします。

補足日時:2013/11/06 08:39
    • good
    • 0
この回答へのお礼

質問者です。
この度のご回答、重ねて感謝申し上げます。

大変申し訳ないのですが、今回発生した問題について、
自己で解決できてしまいました。
以下に解決した方法を記載します。

mysql> LOAD DATA INFILE"Prefecture.csv"
-> INTO TABLE Prefecture FIELDS TERMINATED BY ","

Query OK, 47 rows affected (0.33 sec)
Records: 47 Deleted: 0 Skipped: 0 Warnings

mysql> select * from Prefecture;
+---------+-----------+
| PREF_CD | PREF_NAME |
+---------+-----------+
| 1 | 北海道
| 2 | 青森県
| 3 | 岩手県
| 4 | 宮城県

  (中略)

| 46 | 鹿児島県
| 47 | 沖縄県 |
+---------+-----------+
47 rows in set (0.00 sec)

以上のように、改行コードを指定する一文
-> LINES TERMINATED BY ~
を抜かしたところ、データが正常に読み込まれました。

この度はお騒がせ致しましたことをお詫び申し上げるとともに、
ご回答戴きましたこと、大変感謝致します。

お礼日時:2013/11/06 11:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!