はじめに
こちらでアプリをアップしました。
dockerを安くデプロイしたい【備忘録】【読みづらい】 - Qiita
そのアプリがDBに日本語の登録ができません。 そこの設定周りをやっていこうと思います。
前提イメージ
まずlocalでも登録できなかったし、本番環境でも登録できなかった。 local → 本番 の順番で実装していく。 んで、おそらくMySQLの設定が悪い。詳しくはlogを見てみないとだけど。
実装
開発環境
まずはdockerを起動して、みてみる。 日本語を登録しようとすると、サーバー側でエラーがでた。
server | (/usr/local/src/main.go:77) server | [2023-03-05 08:10:36] Error 1366: Incorrect string value: '\xE3\x81\x84\xE3\x81\xA3...' for column 'name' at row 1
これは指定の行を見てみるとGORMでデータを送信しようとしている時だ。
逆に日本語の登録がDBに直接できないかやってみた。すると同様のエラーがでた。
あーーじゃあMySQLの設定っぽいな。
これの設定をまんまやってみるか。
この設定でやってみた。 docker でdebianを指定したら、apt-getがないって言われないよ。
# 認証周りでエラーが起こったので、versionを5.7に # TODO: いつかmysql:8.0に FROM mysql:5.7-debian RUN apt-get update RUN apt-get -y install locales-all ENV LANG ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja ENV LC_ALL ja_JP.UTF-8 COPY my.cnf /etc/mysql/my.cnf
お、問題なく立ち上がっているっぽい...?
mysqlにログインして、設定を見てみると、
mysql> show variables like 'character%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | utf8 | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.10 sec)
よいね!ちゃんとutf8になってる。 DBにデータをぶち込んでみる。
はいった!じゃあアプリケーションからやってみる。
でーけた!
本番環境
ということは同じような設定を本番環境ですれば良いな。
...って思ったけどやっているっぽい?
https://qiita.com/ayumu-1212/items/47c7ff72dd280c11a57a#mysql%E3%81%AE%E8%A8%AD%E5%AE%9A
え、じゃあ本番環境で日本語の入力をしてみる。
いやできるんかい!!w じゃあ終わり!