ホーム

mariaDBのcharacter_set_clientがlatin1のせいで文字化け

環境

  • mariaDB
  • character_set_client
  • latin1
  • character_set_connection
  • centOS7
  • node.js

 

説明

slackのチャットを受け取ってdbに保存したかったのですが、mariadbのcharacter_set_clientがlatin1のせいで日本語が文字化けしてしまいました。テーブルの設定は問題なくutf-8だったので、若干困りましたが、直接my.cnf を編集してみれば、無事slackのチャットから受け取ったメッセージを日本語のままmariaDBに保存することができました。

ここによれば、どうやら「character_set_client」 と 「character_set_connection」 「character_set_results」の3つはクライアントがクエリを送信し、 クエリ結果を受信するときのキャラクタセットを設定するらしいですね。

今回の場合クライアントっていうのはスラックであり、スラックから受け取った私のcentosってことになります。「character_set_client」 と 「character_set_connection」 「character_set_results」の3つがlatin1ってことは、centosから送信されたクエリはutf8として認識されず、日本語が?になるってことですね。テーブルの設定はがutf-8とか、問題はそこではなかったということでした

mariDBの状態

show variables like 'character%';
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

一回サーバーに戻ってmy.cnfを編集する

sudo vim /etc/my.cnf

追記するのは、下記の一文だけ

*注意:余計に設定を増やしたりしたら、エラーになりました。また、書き込む場所によっても結果が変わるのかな?謎の動きが多いので注意が必要かもです。

[client]
default-character-set = utf8

編集後はこんな感じ

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
character-set-server=utf8

[client]
default-character-set = utf8                                                                                                                                                         

[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid

#
# include all files from the config directory
#
!includedir /etc/my.cnf.d

mariaDB再起動

systemctl stop mariadb

systemctl start mariadb

mariaDBに入ってみてDBの状態を確認

おお〜いい感じ

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/mysql/charsets/ |
+--------------------------+----------------------------+

実行

こうですね〜(ドットインストール風)

スクリーンショット 2017-10-09 21.54.52.png

参考

MySQL5.6のmy.cnfの基本設定

Pocket
LinkedIn にシェア

エンジニアにおすすめできる本

Card image cap
リーダブルコード

より良いコードを書くためのシンプルで実践的なテクニック

Card image cap
Webを支える技術

HTTP,URI,HTML,そしてREST

Card image cap
誰でもPythonで作れる

儲かるAIとソフトウェアの作り方

Card image cap
プログラマが知るべき97のこと

現場で使える実践哲学のマスターピース

Card image cap
情熱プログラマー

時代を超えて。ソフトウェア開発者の幸せな生き方

Card image cap
アジャイルサムライ

プログラミング達人開発者への道

Card image cap
Rubyを作った男 まつもとゆきひろ

コードの世界 スーパー・プログラマになる14の思考法

ご提供 sponsor
 

Meee!(ミー)は、ビジネスからプライベート利用まで、個人のスキルを気軽に売り買いできるスキルマーケットです。カテゴリや居住地から、検索することが可能です。

 

ランゲージエクスチェンジは、ネイティブスピーカーと気軽にマッチングできる言語交換プラットフォームです。あなたの地元に住む外国人を探したり、留学や海外移住の前に、現地のネイティブスピーカーと繋がることもできます!

宣伝
 

りょすけトークchは、仕事や私生活をより豊にするYouTubeチャンネルです。文献(本、映画、論文)から役に立つ情報をまとめ、生涯にわたり役に立つ哲学をお届けしています。是非、チャンネル登録してみてね

-ホーム

Copyright© offブログ! , 2021 All Rights Reserved Powered by AFFINGER5.