2008年4月3日木曜日

mysqlでutf8を使う方法

「mysqlでutf8を使う方法」ってMySQLデータベースでutf8のデータを使うという意味ではない。データベースはutf8で出来ているはずなのに、端末のmysqlコマンドでいろいろやってみても日本語が出ないという話。

データをutf8で作成しているはずなのに端末で文字化けしてるから不思議だな~とは思っていた。phpMyAdminでもMySQL Query browserでも日本語は出ているのに、端末上では????になってしまう。で端末上で
select replace('黒さん株式会社','株式会社','');
とやれば
黒さん
と出てくるのに、何故かstored procedureで同じ事をやろうとしてもうまくいかない。それどころか、時々、stored procedureがぶっ飛んで、無くなってしまう!!!

「困ったな~」「なんでかな~」と思っていて、ハッと思いついた。linuxの端末の文字セットはutf8だけど、mysqlコマンドのコンソールが違ってれば、文字の変換なんぞうまくいくわけないよな!!!

mysqlコマンドのコンソールの文字セットの設定が、デフォルトで今何になっているのか、その設定は何処にどう記述されているのかという話は宿題として、とりあえず、端末でutf8を出してみようという事で、調べてみると、

/etc/my.cnfに
[mysql]
default-character-set=utf8

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


と追加してmysqldを再起動する。で、確認方法として

mysql> SHOW VARIABLES LIKE 'character\_set\_%';

+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------+
6 rows in set (0.00 sec)


と、なっていればO.K.ですよ。という事で、端末で、今まで????だった日本語が無事表示できるようになりました。

マルッと!さんのmysql で utf8 を使うを参考にさせていただきました。どうもありがとうございました。

と、書いたのはいいんだけど、実際にやってみたら、自宅サーバで書いていたブログが文字化けしてしまった。どうもMovable typeは違うコードを使ってたみたい。これも、今度、確認しておかなければならない宿題になりました。

で、/etc/my.cnfに

[mysql]
default-character-set=utf8


だけ追加したら、とりあえず端末もstored procedureもブログをO.K.となりました。やれやれ(^^;

0 件のコメント: