[サーバー] サクラのレンタルサーバーで、mysql接続時の文字化けに対応する
こんにちは、@yoheiMuneです。
今日はサクラのレンタルサーバーにsshでログインして、
Wordpressを含む多くのアプリケーションでは、文字コードに
最後になりますが本ブログでは、Linux、フロントエンド、Swift、PHP、Node.js、Python、Java、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!
今日はサクラのレンタルサーバーにsshでログインして、
mysql
コマンドでMySQLサーバーに接続した時に、文字化けしないようにする方法をブログに書きたいと思います。目次
何が問題か
サクラのレンタルサーバーにsshでアクセスして、# サクラのレンタルサーバーにssh接続 $ ssh [ユーザー名]@xxx.sakura.ne.jpmysqlに以下のように接続した場合に、
$ mysql -u [ユーザー名] -p -h mysqlxxx.db.sakura.ne.jp日本語を含む検索を行うと文字化けしてしまいます。
mysql> select post_title from wp_posts where post_type = "post" limit 1; +------------+ | post_title | +------------+ | ??ư???? | +------------+これでは困るということで、原因と対策をブログに書きたいと思います。
原因は何か
原因は、MySQLに接続する時に利用する文字コードが正しくないことです。文字コードの設定は、MySQLにログイン後に、以下のコマンドで確認できます。mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | ujis | | character_set_connection | ujis | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | ujis | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.01 sec)ここではMySQL接続時(
character_set_client
)の文字コードにujis
が使われていることがわかります。Wordpressを含む多くのアプリケーションでは、文字コードに
utf8
やutf8mb4
(=UTF8で絵文字も登録できる)を指定することが多いです。今回は保存時にはutf8
を使っているのに、読み出す時にujis
を使ったために文字化けした、という問題です。文字化けを直すには
接続時に文字コードを指定することで解決できます。--default-character-set=utf8mb4
(または--default-character-set=utf8
)を指定します。$ mysql -u [ユーザー名] -p -h mysqlxxx.db.sakura.ne.jp --default-character-set=utf8mb4これで同じ検索をすると、文字化けせずに取得できます。
mysql> select post_title from wp_posts where post_type = "post" limit 1; +------------+ | post_title | +------------+ | こんにちは | +------------+また、接続時の文字コードが変わっていることも確認できます。
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec)めでたしめでたし。
最後に
今回はサクラのレンサバを例に書きましたが、mysql接続は他の環境でもよくあることなので、--default-character-set
は覚えておいて損はないです。またmysqlコマンド以外にも、PHPやNode.JSなどのプログラムからのアクセスでも文字コード指定は必要なので、文字コード指定には注意できると素敵です。最後になりますが本ブログでは、Linux、フロントエンド、Swift、PHP、Node.js、Python、Java、インフラ、Go言語、機械学習、などの技術トピックを発信をしていきます。「プログラミングで困ったその時の、解決の糸口に!」そんな目標でブログを書き続けています。ぜひ、本ブログのRSSやTwitterをフォローして貰えたら嬉しいです ^ ^
最後までご覧頂きましてありがとうございました!