0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MySQLのCSVデータをインポートできなかったが, 文字コードが原因だった.

Last updated at Posted at 2019-02-04

こんにちは, 就職先でDBを扱うという事で,最近SQLを頑張ろうとしている者です.
(なお研究の進捗はひどい模様)

先日から始めている勉強サイトの中で, 通し番号と都道府県の組のデータを読み込ませるものがあり,
既存データを読み込ませる際に,

ERROR 1366 (HY000): Incorrect integer value: '\FEFF1' for column 'pref_cd' at row 1

が発生してしまいました.

そこで, 現在のMySQLに於ける文字コードの設定?を確認してみたところ,

mysql> show variables like "chara%";
+--------------------------+---------------------------------------------------------+
| Variable_name            | Value                                                   |
+--------------------------+---------------------------------------------------------+
| character_set_client     | cp932                                                   |
| character_set_connection | cp932                                                   |
| character_set_database   | utf8mb4                                                 |
| character_set_filesystem | binary                                                  |
| character_set_results    | cp932                                                   |
| character_set_server     | utf8mb4                                                 |
| character_set_system     | utf8                                                    |
| character_sets_dir       | C:\Program Files\MySQL\MySQL Server 8.0\share\charsets\ |
+--------------------------+---------------------------------------------------------+

となっています.

「FEFF」はBOMありのUTF-8に注目する

エラーコードの**「FEFF」に注目すると,
これは, 文字コードの
UTF-8というもの中でもBOM**(Byte Order Mark)があるものです.

BOMとは, ファイルの先頭に付いている16ビットの値ということで, これによってデータがどの文字コードで書かれているかを識別する役割をもっているようです.(違ってたらスミマセン!)

そこで, utf8のことを検索したら似ているページが出てきていて, そこで,

character_set_system : システムの使用する文字セットで常にutf8が使用されている

と記載されて, MySQLではUTF-8(これはBOMなし)を利用しないとダメなんだ!という事が判明しました.
というわけで, 読み込むデータをUTF-8(BOMなし)にしていきます.

じゃ, どうすればUTF-8(BOMなし)にできるの?

一番簡単な方法としては, TeraPadというものがオススメです.

こちらでは, 文字コードを選択して保存することができます.

逆にいうと, windows標準のメモ帳は文字コードが選択できず, UTF-8(BOMあり)で保存していることになります(ここも間違ってたらスミマセン)

という事で, こちらのサイトを参考にしながらメモ帳のデータを再保存しまして処理を行ったところ,
エラーなしで処理が完了しました. めでたしめでたし!

備考

(本投稿はteratailで筆者が質問した内容をまとめています)

参考ページ

mysqlで文字コードをutf8にセットする
バイトオーダーマーク

UTF-8のBOMにはまった話

0
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?