すがブロ

sugamasaoのhatenablogだよ

外部サーバにあるMySQLへ接続

Hibernateを学習するにあたって、ひとまず普通にDBアクセスできるプログラムを書いてみようと思ったので実践。
コード自体は問題なく記述できたのだが、なぜか接続できない。接続用のURIの設定がおかしいのかと小一時間格闘した結果、どうもポートの指定をしていなかったようだ_| ̄|○
で、さらにプログラム以前の問題として、アクセスするユーザの権限が足りなかった。……正確に言うと、localhost以外のホストからはアクセスできなくなっていた。
なので、適当なサイトに書いてあるがままにアクセス権などを設定したらあっさり動いた。

しかし、一つ問題がある。
DBからデータを取ってきてJavaのコンソールで表示しようとしているのだがどうしても文字化けしてしまう
あまり時間を掛けて調べたわけでは無いけれど、そもそもMySQL自体はインストールの際にUTF8でインストールしたはずで、データの投入もTeraTerm上(文字コードはUTF8)でやっているので変な食い違いは無いはず……。なのに、文字化けだ。
で、URIの設定でuseUnicode=true&characterEncoding=utf8とかもやってみたけどできなくて、どうしようか、と思いつつ今ここに記事を書くに当たって、改めて調べてみたらこのようなサイト発見。
id:omochist:20060513:1147503245
どうやら外部から受け取るクエリの値や返却する際の値についても設定しなくてはいけないようだった。なので、そこらへんをすべてutf8へ統一したところ、うまくできるようになった(ちなみに、上記のURIの設定を指定したままで試したらうまくいかなかった。DB側の設定さえ済めばあとは特に指定は不要のようだ)。
ちなみに、自分の現在の環境は以下のような感じ。

mysql> show variables like 'character\_set\_%';
 +--------------------------+--------+
 | 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   |
 +--------------------------+--------+

これで文字コード問題からは開放される……のかな?