#はじめに
取得した2バイト文字が文字化けしてしまい、色々確認して解消したというメモに近いものです。
#環境
- MySQL
- Java
JavaのHttp Clientを利用してAPIを取得したデータを、
JDBCドライバーを利用してMySQLに接続し、DBに入れようとしています。
#そのいち
テーブルを作成した際に、お決まりの呪文を唱えているか。
お決まりの呪文は、以下の通りです。
set character_set_client = utf8;
set character_set_connection = utf8;
CREATE TABLE `TABLE_NAME` (
(略)
) DEFAULT CHARSET=utf8';
ポイントはSQLを流す前に呪文を唱えることですが、
心配性な方は、CREATE TABLE文の終わりでも呪文を唱えましょう。
#そのに
HttpClientでリクエストをビルドする際、呪文を唱えているか
HttpClient client = HttpClient.newBuilder().version(Version.HTTP_2).build();
Builder requestBuilder = HttpRequest.newBuilder().uri(uri).setHeader("Content-type","application/json; charset=UTF-8");
HttpRequest request = requestBuilder.build();
setHeaderの後ろあたりの、charset=UTF-8
が、呪文です。
#そのさん
JDBCドライバーの設定情報で、呪文を唱えているか
dbconnection.properties
driver.class.name=com.mysql.jdbc.Driver
uri=jdbc:mysql://mysql.test.com/mydb?useUnicode=true&characterEncoding=utf8
上記のmysql.test.com
が接続先で、mydb
がデータベース名です。
その後の?useUnicode=true&characterEncoding=utf8
に注目してください。
呪文を唱えています。
#さいごに
私の場合は、そのさん で解決しました。
似たようなことを、まったく同じ環境で実装したことがあるのですが、その時は文字化けしなかったです・・・