こんにちは, 就職先で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で筆者が質問した内容をまとめています)