MySQLでcsvファイルからデータをインポートするときなどに使う
LOAD DATA LOCAL INFILE
で、文字コードを指定して行うやり方。
やり方
読み取るファイルの文字コードを指定する
読み取るファイルの文字コードを確認する
エディタで確認するとか、
nkwコマンド使うとか。
MySQLサーバの文字コード確認する
mysql> show global variables like "character%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.41 sec)
mysql>
読み込むファイルとMySQLサーバのcharacter_set_databaseが一致してない場合は、character_set_databaseを変更してあげる。
character_set_databaseシステム変数の文字セットを使う。
サーバーは、
character_set_database
システム変数によって示されている文字セットを使用してファイル内の情報を解釈します。
読み取るcsvファイルの文字コードがUTF-8なら、以下をSQLに記述する。
set character_set_database=utf8
utf-8のcsvからutf8mb4のMySQLにインポートしてもよいか?
utf8
→ 1~3バイトまで対応
utf8mb4
→ 1~4バイトまで対応
つーことなんで、utf8mb4がutf8を兼ねてると考えてもよいのか?
本来UTF-8は、1~4バイトで文字を表すルールです。
utf8
は現在utf8mb3
のエイリアスですが、ある時点ではutf8
がutf8mb4
への参照になることが予想されます。
あ、てことはcsvのutf8(1~4バイトのはず)と、MySQLのutf8mb4(1~4バイト)はイコールかもしれんな。
むしろ現時点ではMySQL側を「utf8」にしてしまうと失敗する可能性が出てくるか。
コメント