質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

  • MySQL

    6173questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • MacOS(OSX)

    2037questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • CSV

    710questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

csvの文字コードがutf8なのにmysqlのテーブルに取り込むのにutf8じゃないと怒られる

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 3
  • VIEW 110

HiroUchi

score 2

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • 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 に変えたところ取り込むことができました。

    キャンセル

まだ回答がついていません

同じタグがついた質問を見る

  • MySQL

    6173questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • MacOS(OSX)

    2037questions

    MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

  • CSV

    710questions

    CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。