目次

2009年1月15日木曜日

MySQL ~ターミナルで文字化けする問題~

RORをやっていると、必ずといっていいほど環境系でつまずきます。今日もMySQLでつまずきました。

ターミナルでmysqlを立ち上げ、

my sql> use (DBの名前)


mysql> desc (テーブルの名前);


すると
フィールドの一覧が表示されます。
私は今回、membersというテーブルを作ってあったので、それを読み出しました。


mysql> desc members;



+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| member_number | int(11) | NO | | NULL | |
| player | tinyint(1) | NO | | 0 | |
| family_name | varchar(255) | NO | | NULL | |
| given_name | varchar(255) | NO | | NULL | |
| furigana | varchar(255) | NO | | NULL | |
| email | varchar(255) | YES | | NULL | |
| phone | varchar(255) | YES | | NULL | |
| sex | int(11) | YES | | NULL | |
| birthday | date | YES | | NULL | |
| remarks | text | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
13 rows in set (0.01 sec)



ここからレコードを抜き出してみよう。まずは名字から


mysql> select family_name from members;




+-------------+
| family_name |
+-------------+
| ????    |
| ????    |
| ????    |
| ????    |
| ????    |
| ????    |
| ????    |
| ????    |
| ????    |
| ????    |
+-------------+



ばっちり文字化けです!


mysql>set character set sjis;


本に書いてある通りに打ってみます。これで表示してくれるだろう。。。
と思ったけど、やっぱり同じ結果。

う〜ん、、、と悩みをtwittしたところ、心優しい人たちが解決方法を伝授してくれました。

(1)そもそもsjisでファイルを作っちゃダメ!
私はmacユーザー。本はwin向け。よってファイルがsjisで作られてるわ、characterもsjisになってるわで全然これじゃ表示出来ないって話です。
(2)ターミナルの環境設定をもう一度見よう。
こんな初歩的なところで、、、、恥ずかしくなりました。

ここがutf-8になっていなかった。恥ずかしい!

これでもう一度

mysql> select family_name from members;




+-------------+
| family_name |
+-------------+
| 佐藤    |
| 鈴木    |
| 高橋    |
| 田中    |
| 渡辺    |
| 伊藤    |
| 山本    |
| 佐藤    |
| 鈴木    |
| 高橋    |
+-------------+
10 rows in set (0.00 sec)



うん、できました!

0 件のコメント: