Counterize IIの検索された文字列の文字化けを直す(失敗)

Counterize IIの表示を日本語化する手続きを経て、これまで英語で表記されていた大部分を日本語化することができるようになりました。
なんで「全部」ではなく「大部分」なのかというと、それは現在がこういう状態だからです。

ちゃんと「検索されたキーワード」は日本語化されていますね。残念ながらmost searched keywords todayは日本語化されていませんが(対応する文字列が設定されていないんでしょうかね?)、それは大きな問題ではありません。
問題は、その「今日最もよく検索されたキーワード」の項目です。「?」がイッパイ並んでますが、これ、多分日本語で検索されている文字ですよね〜。
アルファベットはちゃんと表示されている一方で、日本語はダメ。もしこれが分かったところでどうと言うことはないんですが、何が検索されているのかはやっぱり知りたいじゃないですか!

そこでGoogle先生に尋ねてみたところ、同じ問題にぶつかり、解決した先達はいるものです(笑)
なんでもそれはWordPressが使用しているMySQLの文字コードの問題であるらしい、ということが分かった上に、解決へのフローも確認できました。

そちらによれば、手順としては

  1. MySQLのキャラクターコードをutf-8に変更する
  2. WordPress用のデータベースをバックアップする
  3. MySQLを再起動する
  4. WordPress用のデータベースを削除する
  5. WordPress用のデータベースを作成する
  6. WordPress用のユーザ権限を付与する
  7. バックアップしたデータベースをリストアする

という流れだそうです。
単に文字コードを変更するだけではダメなのですね・・・。残念!
それはさておき、とにかくこのフローをたどってみることにします!
でも、その前に。

0. 現在のキャラクターコードを確認する

サーバにログインし、

$ mysql -u root -p

でMySQLにログイン。プロンプトが返ってきたら、まずはデータベースの確認をします。

mysql> show databases;
+——————–+
| Database           |
+——————–+
| information_schema |
| bootablog          |
| mysql              |
| test               |
+——————–+
4 rows in set (0.00 sec)

このあたりの話題は、WordPressインストール記事にまとめてあるので、初めてではないですね(忘れてはいますけど)。
次に、現在の文字コードがどのようになっているかを確認します。

mysql> show variables like ‘character\_set\_%’;
+————————–+——–+
| Variable_name            | Value  |
+————————–+——–+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | latin1 |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | latin1 |
| character_set_system     | utf8   |
+————————–+——–+
7 rows in set (0.00 sec)

そしてもう一つ。

mysql> show variables like ‘%collation%’;
+———————-+——————-+
| Variable_name        | Value             |
+———————-+——————-+
| collation_connection | latin1_swedish_ci |
| collation_database   | latin1_swedish_ci |
| collation_server     | latin1_swedish_ci |
+———————-+——————-+
3 rows in set (0.00 sec)

要するに、このlatin1になっているところがuft-8になれば、文字化けせずに表示される、ということのようです。

なお、show variables like ‘character\_set\_%’は、show variables like ‘character%’でもOKとのこと。「%」はいわゆる「*」のことなんですね、きっと(情報処理のSQLではそうですものね)。

1. MySQLのキャラクターコードをutf-8に変更する

CentOS 5.xではmy.cnfは/etc/my.cnfにあるので、ここにキャラクターセットを加筆します。加筆内容は下記の通りに。

[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8
skip-character-set-client-handshake

[client]でクライアント側の文字コードを、[mysqld]でサーバ側の文字コードを指定します。ちなみに、このdefault-character-setの指定を行わないと、latin1になるそうです。

2. WordPress用のデータベースをバックアップする

MySQLから一度ログアウトし、端末上からデータベースのバックアップを作成します。今回はblogのデータのみバックアップするので、データベース名はbootablogを指定します。

$ mysqldump bootablog -u root -p –opt > bootablog.back
$ ls
-rw-rw-r– 1 hoge hogehoge 5467779  3月 22 20:08 bootablog.back

バックアップは無事に作成されたようです。

3. MySQLを再起動する

# /etc/init.d/mysqld restart
mysqld を停止中:                    [  OK  ]
mysqld を起動中:                    [  OK  ]

4. 5. WordPress用のデータベースを削除する、WordPress用のデータベースを作成する

MySQLにログインし、bootablogデータベースを削除します。

$ mysql bootablog -u root -p;
mysql> drop database bootablog;
Query OK, 16 rows affected (0.24 sec)
mysql> show databases;
+——————–+
| Database           |
+——————–+
| information_schema |
| mysql              |
| test               |
+——————–+
3 rows in set (0.00 sec)

bootablogが無くなっている(!)ことを確認したら、再度bootablogを作成します。

mysql> create database bootablog;
Query OK, 1 row affected (0.01 sec)
mysql> show variables like ‘char%’;
+————————–+—————————-+
| Variable_name            | Value                      |
+————————–+—————————-+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | latin1                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

一カ所おかしいです。
そこでもう一度設定をチェックしますが、記述におかしな所はなく。これまたGoogle先生に確認すると、mysql5.5では書き方が変わっているんだそうです。
default-character-set = utf8 は、 character-set-server=utf8 という表記に変更されたとのこと。

#mysqladmin -u root -p version
Enter password:
Server version          5.0.95

で確認したら、Versionは5.0のようですが、ダイジョブでしょうか??
MySQLサーバを再起動させ、MySQLにログインして再度確認します。

mysql> create database bootablog;
Query OK, 1 row affected (0.01 sec)
mysql> show variables like ‘char%’;
+————————–+—————————-+
| 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/ |
+————————–+—————————-+
8 rows in set (0.00 sec)

今度はOKでした〜。
※その後、default-character-set = utf8に戻しました。これは、mysqlにてコマンド set character_set_server = utf8; を実行すればよい、という情報を得たからです。

6. WordPress用のユーザ権限を付与する

自分のホームページ上の情報も参考にしながら権限付与します。

mysql> grant all privileges on *.* to bootablog@”%” identified by ‘PASSWORD’ with grant option;
Query OK, 0 rows affected (0.01 sec)

mysql> grant all privileges on *.* to bootablog@localhost identified by ‘PASSWORD’ with grant option;
Query OK, 0 rows affected (0.00 sec)

※PASSWORDには、実際に設定したパスワードが入ります。

7. バックアップしたデータベースをリストアする

ようやく最終段階です。上でバックアップしたbootablog.backをmysqlコマンドを使って戻します。

$ $mysql -u root -p bootablog < bootablog.back
Enter password:

しばらくするとプロンプトが戻ってきます(戻ってくればリストアは完了です)。
そうしたら、自分のBLOGにアクセスしてみます。
データベースを削除した直前の状態まで戻って記事が表示されれば完成です!

さて、検索文字の文字化けは直っているのでしょうか・・・?

8. 最終確認

ダッシュボードに入り、Counterize IIの画面を開いて検索キーワードを確認すると・・・!

・・・「?」のままでした・・・orz
ナゼだ〜〜〜〜〜っ!?

bootablogのステータスを確認してみても、

mysql> status;
————–
mysql  Ver 14.12 Distrib 5.0.95, for redhat-linux-gnu (i386) using readline 5.1

Connection id:          2
Current database:       bootablog
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ”
Using delimiter:        ;
Server version:         5.0.95 Source distribution
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 1 min 58 sec

Threads: 1  Questions: 390  Slow queries: 0  Opens: 28  Flush tables: 1  Open tables: 22  Queries per second avg: 3.305
————–

できちんとutf8になっているし・・・。

というわけで、残念ながらMySQLの文字コードはutf-8にできたものの、問題解決には至りませんでした。
最も、放置するつもりはありませんが、とりあえずこの話題はここまでということで・・・orz

boota

いろんなモノに、いろんな意味で、ヲタ。なのかも?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)