前提・実現したいこと
ここに質問の内容を詳しく書いてください。
macのmysqlのcharctersテーブルにcsvの2000行ほどあるデータを取り込もうとしたが
以下のようにエラーが出ております。
発生している問題・エラーメッセージ
エラーメッセージ
ERROR 1300 (HY000): Invalid utf8 character string: ''
▼12/7更新(※「エラー後に試したこと」参照)
ERROR 1265 (01000): Data truncated for column 'team_id' at row 1
実行したこと
以下を実施し、上記エラーがでております。
▼csvファイルの文字コード
# file --mime character.csv
character.csv: text/plain; charset=utf-8
▼csv取り込んだ際のコード
LOAD DATA INFILE '/usr/local/var/mysql/character.csv' INTO TABLE characters FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
▼mysqlの文字コード
+--------------------------------------+------------------------------------------------------+
| Variable_name | Value |
+--------------------------------------+------------------------------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/Cellar/mysql/8.0.12/share/mysql/charsets/ |
| validate_password.special_char_count | 1 |
+--------------------------------------+------------------------------------------------------+
エラー後に試したこと
以下を実施
character_set_client を utf8mb4 ⇛ utf8
character_set_connection を utf8mb4 ⇛ utf8
character_set_results を utf8mb4 ⇛ utf8
■12/7更新
①nkfコマンドで文字コードを変更
$ nkf -w /usr/local/var/mysql/character.csv > /usr/local/var/mysql/character_2.csv
②nkfコマンドで文字コード確認
$ nkf --guess /usr/local/var/mysql/character_2.csv
UTF-8 (LF)
②mysqlコマンドでcsv取り込み
mysql > LOAD DATA INFILE '/usr/local/var/mysql/character_2.csv' INTO TABLE characters FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' ESCAPED BY '"' LINES TERMINATED BY '\r\n';
③エラー
ERROR 1265 (01000): Data truncated for column 'team_id' at row 1
▼テーブルの情報は以下です
--------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| path | char(26) | NO | | NULL | |
| name | varchar(200) | NO | | NULL | |
| twitter_link | varchar(200) | YES | | NULL | |
| twitter_name | varchar(300) | YES | | NULL | |
| publishedFg | int(11) | NO | | NULL | |
| team_id | int(11) | NO | MUL | NULL | |
+--------------+--------------+------+-----+---------+----------------+
team-idは1〜37の値しか入っていないのですが、上記エラーがでました。
補足情報(FW/ツールのバージョンなど)
▼mysqlのバージョン
mysql Ver 8.0.12 for osx10.13 on x86_64 (Homebrew)
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
check解決した方法
0
csvの一部に絵文字が存在し、DBの設定がutf-8であったため、エラーとなっていたため、
utf8mb4に変更し、取り込みが成功しました。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
質問への追記・修正、ベストアンサー選択の依頼
fu7mu4
2018/12/07 01:10 編集
過去の類似質問に、https://teratail.com/questions/30608 がありました。そのときは読み込むファイルの文字コードを誤解していたというのが原因でしたので、一度 iconvやnkfなどで文字コードを確認していただいてよろしいでしょうか?また確認された際にはどのような方法で確認したかを書いていただけるとその後の回答がつきやすいと思います。
HiroUchi
2018/12/07 09:09
アドバイスをありがとうございます。nkfコマンドにて、文字コードをutf8変更し、再度取り込みましたが、別なエラーがでました(※質問に記載)。
fu7mu4
2018/12/07 23:41 編集
nkfコマンドでは改行文字がLFであるのに、LINES TERMINATED BY '\r\n' というのはCRLFではありませんか? この二つに整合がとれていないように見うけられます。
HiroUchi
2018/12/10 11:54
ありがとうございます。ご指摘部分をCRLFに変えまして。csvファイルの中に絵文字が入っていましたので、「character_set_database」を utf8mb4 に、対象のテーブルのカラムを utf8mb4 に変えたところ取り込むことができました。