Dockerで建てたMySQLサーバから取得した文字をブラウザで表示すると文字化けする。
Dockerとdocker-composeを使ってMySQLサーバを立てているのですが、データベースから取得したデータがブラウザで表示すると文字化けしてしまいます。
MySQLのcharsetの設定は以下のとおりです。
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
character_set_database
がutf8になっているのでこれで良いと考えています。また、コンテナ内でCLIでデータベースのデータを表示するとちゃんと日本語で表示されます。
ちなみに文字コードの設定はdocker-composeの起動オプションを
mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
として設定しています。
データベースの初期化に利用したSQLファイルのテーブル定義部分は以下の通りです。
CREATE TABLE artists (
id integer NOT NULL,
created_at timestamp NULL DEFAULT NULL,
updated_at timestamp NULL DEFAULT NULL,
deleted_at timestamp NULL DEFAULT NULL,
name character varying(255),
phonetic character varying(255)
) ENGINE=InnoDB CHARSET=utf8;
こちらでもutf8を設定しているのですが、ブラウザでは文字化けします。あとローカル(MBA)のMySQLでも試しましたが、そちらの方ではブラウザに表示しても文字化けはありませんでした。
解決方法をお教えいただけると幸いです。
追記
ブラウザでの表示には自分で作成したWebアプリケーションを使用してJSONで出力するようにしています。
データベースとの接続にはgormというオープンソースを使用しており、データベースの接続に使っているURLは以下のとおりです。
username:password@tcp(db:3306)/databasename?charset=utf8&parseTime=True&loc=Asia%2FTokyo