563365 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

青空切手市

PR

プロフィール


納豆昆布

コメント新着

 納豆昆布@ Re[1]:まいにち水剥がし(05/21) パウロさん、こんにちは。 この日はほんと…
 納豆昆布@ Re[1]:Pinterest始めました(01/10) わわわ!mぴょんさんじゃないですか!! …
 **ぴょん**@ Re:Pinterest始めました(01/10) 数年前にたくさんの切手を落札させていた…
 パウロ@ Re:まいにち水剥がし(05/21) うわ、凄いですね! 比べたら自分は少しし…

お気に入りブログ

ウイルスの呟き、矢… turbo717さん

碧山窟 ヤマトカケルさん
Il y a longtemps *チボリ*さん
「あれこれ帳」 あ… ももアロエさん
Dolce Vita しまっぺさん
HandMade Jungle -ハ… utan.さん
カトルカール☆ハンド… カール71472さん
折り紙サロン ハッケミィさん
フレーム切手 写真… Mr.Pスタンさん
周・郵・研 archives philatelist_jpさん

フリーページ

2006.12.20
XML
カテゴリ:macしか使えない私
ややこしい世界で奮闘中。
先日の日記に書いた通り、MySQLとその周りの文字化けと戦っています。

答えを探しにgoogle検索の旅へ…
 …あらら、「MAMP 文字化け」で検索したら、自分の日記に戻ってしまいました。堂々巡りじゃん。(>_<)
っていうか、「文字化けでハマっています」だけでは、万が一誰かが辿り着いた時に申し訳ないので、今理解している事をもう少しメモしておきます。
(ちなみにこういう態度だと、マイナーな話題にはどんどん突っ込んで行くハメになる。)

私の環境は、以下の通り。 
   MAMP1.3.1
   MySQL5.0.19
   PHP5.1.4
   phpMyAdmin2.7.0-pl2
   mac OS10.3.9


<文字化け その1>
MAMPをインストールしたあと、な~んにもわからないままに、試しにphpMyAdminでデータベースをでっち上げたところ、日本語を入れたフィールドがさくっと文字化けしました。

…ちょっと冷静に画面を観察し、それらしいところを探します…

「照会順序」というプルダウン項目が怪しいです。
ここを見ると、世界の文字コードがいっぱい並んでいます。
(しかも、デフォルトで(?)latin1_swedish_ciになっていました。私ゃスウェーデン人じゃないよ~。)

ここを、ユニコードのutf8_general_ciに変更。
ちなみに、日本語は他にもEUCやShiftJISが使えますが、私の用途では外国語(各国語)が入る事が十分あり得るので、ここではユニコードを選んでいます。

しかし、ただ変更しただけでは、一度入れてしまった日本語は元に戻りませんでした。変更後に中身を消して、もう一度データを打ち直したところ、今度はきちんと日本語で表示されるようになりました。(最初から照会順序をきちんとしておけ、という事のようです。)

今まで使っていたAppleWorksとかFileMaker3.0では、ユニコードが使えませんでした。しかたがないので、「ユニコード化までの注」というフィールドをわざわざ作って、「ESPANAのNの上にニョロ」なんていう注記をつけているくらいです(笑)。これをもしもユニコードで新しく作り直せれば、かなりしあわせになれそうです。
(実用化のメドはありませんが(^_^;)…将来の”夢”として。)



<文字化け その2>
<その1>によりきちんと日本語で表示されたテーブルですが、本についていたPHPスクリプトでデータを引っぱると、また前と同じような文字化けをしてしまいました。この対策はなかなか理解ができなくて、かなり苦しみました。
ちなみに、MAMPで作ったPHPファイルはhtdocsフォルダへ入れます。
デフォルト設定の場合、ブラウザでアクセスするURLは以下の通り。
http://localhost:8888/○○○.php
ここでつまずいたのは私だけかもしれませんが、いちおう...ψ(。。)メモメモ...


この文字化けについていろいろ調べたところ、クライアントであるPHPさんにも「データはユニコードでよろしく」と注文をつけないとダメみたいなんです。指示が無いと、PHPさんではデフォルトのlatin1(そして文字化け)になってしまうようでした。
(もしかすると、<その1>でやったことは、クライアントのphpMyAdminさんに指示を出しただけだったのかもしれません。)

PHPさんに指示を出すには、具体的には、
   mysql_connect
で、データベースに接続し、
   mysql_select_db
で、データベースを選択し、
ここからSELECT FROM~と文字列を見に行く前に!
   mysql_query("set names utf8");
この1行で「UTF-8でよろしく!」と、一声かければ良いようです。

なお、本についていたサンプルはEUCで作られていましたので、それに従って"set names ujis"にしてみたところ、本の通りにきちんと表示されました。ヾ(@⌒▽⌒@)ノ
(気を良くして全部UTF-8にしたところ、また別なところが文字化けしました。長くなるので、この話題は次の日記へ。)
ちなみに、命令の最後にセミコロンをつけるのを忘れて、画面が真っ白になって私の頭も真っ白になったのは、ココだけのヒミツです。ミスに気付くまで、だいぶ時間がかかりました。だって、PHPなんて書くの初めてなんだもん。


ところで、この「PHPさんへの指示」のやり方だと、PHPさんを使うたびに何度も指示をしなくてはならなく、少々面倒。

これをサボるには、MYSQLの設定ファイルである「my.cnf」の中の[mysqld]のところに
   skip-character-set-client-handshake
という魔法の1文を加えると、サーバーさん(MYSQL)もクライアントさん(PHPなど)も、同じ文字コードで手をつないでくれるらしいのです。(*^ー^)人(^ー^*)

ところが、MAMPで簡単インストールをしていると「my.cnf」なんて見た覚えも作った覚えも無いんですよね。で、公式マニュアル見てもWindowsの場合とUnixの場合しか書いてありません。

えーと。( ̄~ ̄;)
macは、MYSQL的には「macの皮をかぶったUnix」なのかな?
…ってことは、Unixの
   /etc/my.cnf   → グローバルオプション
   DATADIR/my.cnf → サーバ固有オプション
ってやつで良さそう。

/etcってのは、mac上では不可視フォルダで、いじるのが面倒。
(Finderの「移動」-「フォルダへ移動…」ダイヤログに/etcと入れると、行けますが。)
上から順に見に行くみたいだから、1つだけ作るぶんには、グローバルオプションでもサーバ固有オプションでも、どっちでも良さそうな気がします。
DATADIRってのが「MySQL データディレクトリ」だそうなので、
   /MAMP/db/mysql/my.cnf
(サーバ固有オプション)で良さそうです。
(これはまだ時間が無くて、試していません。調べただけ。)


参考URL
・日本MySQLユーザ会
ここのFAQにかなり詳しく書いてありますが、正直な話、初見で全く意味が分かりませんでした。あちこち調べてから戻って読んで、やっと何が書いてあるのか少しわかった程度。
・MySQL 4.1 日本語環境設定方法 (キャラクタセット設定方法) (iandeth.)
・4.1.2. my.cnf オプション設定ファイル(公式マニュアル)


追伸:
ユニコードの人は、「my.cnf」の中の[mysqld]のところに
   default-character-set=utf8
も追加すると、しあわせになれそうです。
(未確認)






最終更新日  2006.12.20 19:56:40
コメント(13) | コメントを書く
[macしか使えない私] カテゴリの最新記事



Copyright (c) 1997-2020 Rakuten, Inc. All Rights Reserved.