kiamoto_keiko
@kiamoto_keiko (keiko k)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

MySQLのcharacter_set_serverの文字コードを「latin1」から「UTF-8」への変更

解決したいこと

MySQLのcharacter_set_serverの文字コードを「latin1」から「UTF-8」に変更が上手く行かず困っております。

環境
MySQL
version 5.6.50

発生している問題・エラー

データベースの設定文字コードを確認すると下記の様に出力結果が返されます。なぜかcharacter_set_serverだけ 「latin1」のままで変更されません。

mysql> show variables like "character%";
+--------------------------+------------------------------+
| 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     | latin1                       |
| character_set_system     | utf8                         |
| character_sets_dir       | /usr/share/mysql56/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.30 sec)

該当するソースコード

catコマンドでの my.cnfです。

keikonoMacBook-Pro:etc keiko$ cat my.cnf
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
default-character-set = utf8
[client]
default-character-set = utf8
[mysql]
default-character-set = utf8 

自分で試したこと

[set character_set_server = utf8;]
のコマンド入力すると一時的に、下記のようにutf8が出力されます。
しかし再起動するとまた「latin1」に戻ってしまいます。

mysql> set character_set_server = utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> show variables like "character%";
+--------------------------+------------------------------+
| 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                         |
| character_sets_dir       | /usr/share/mysql56/charsets/ |
+--------------------------+------------------------------+
8 rows in set (0.30 sec)

my.cnfの中身も、
character-set-server = utf8に書き換えたりしてみましたが、
やはりcharacter_set_server の部分のみ「latin1」のままです。
他に試してみたほうが良いことなどはございますか?
御指導御鞭撻のほどよろしくお願い致します。

0

2Answer

[mysqld] セクションに default-character-set ではなく character-set-server を指定したらどうでしょうか?
また、その場合には照合順序( collation-server )も指定したほうが良いようです。

--character-set-server=charset_name, -C charset_name
(略)
このオプションを使用してデフォルト以外の文字セットを指定する場合、照合順序を指定するために --collation-server も使用します。

とりあえす以下の例では utf8_general_ci を指定していますが、何にするかはご自身で決定してください。

  [mysqld]
  # Only allow connections from localhost
  bind-address = 127.0.0.1
  mysqlx-bind-address = 127.0.0.1
- default-character-set = utf8
+ character-set-server = utf8
+ collation-server = utf8_general_ci
0Like

@yoshi389111
コメントを頂き誠にありがとうございます。
cnfファイルを書き換えてみましたが結果は同じでした。


# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
mysqlx-bind-address = 127.0.0.1
character-set-server = utf8
collation-server = utf8_general_ci
[client]
default-character-set=utf8
[mysql] 
default-character-set=utf8

スクリーンショット 2021-04-13 23.07.45.png

今回「latin1」から「utf8」変更したいと思った理由は、添付画像のアプリのユーザーからのインプットテキストの部分で入力すると文字化けが起こってしまうを解消したいと考え投稿致しました。
アドミンでのCLIでの直接入力では文字化けは起こらないのに、ユーザーからの入力では文字化けが起こります。
テーブル作成時の設定で[DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci]も設定してみましたが解消されませんでした。
何か良い方法や試して見たほうが良いことなどあればご教授をよろしくお願い致します。

0Like

Your answer might help someone💌