[PHP-users 31148] Re: MediaWikiとMySQL間で利用する文字コードについて

YuGo yu.gotou @ gtec-ni.com
2006年 12月 27日 (水) 18:21:04 JST


MITSUYA MAEDA さま
わたしは以下のように考えます。
MySQLのテーブル内はINSERTされた文字コードをそのまま保存しているだけで、
それがEUC-JPで解釈するとどんな字になるかとか、そんな文字コードは存在しな
いとか考えていません。
たとえば0x82A0(SJISで「あ」)という字が入ってきたら、それをそのまま文字
コードとして保存しているだけで、クライアントがSJISでそのデータをSELECTし
たら「あ」を返すし、UTF-8で呼び出したらたぶん文字化けする。
つまりこのケースのようにujisのサーバに、SJISやUTF-8の文字をINSERTしても
別にエラーを出さないし、読むときに入れたときの文字エンコーディングを使え
ばよい。
わたしも、character_set:latin1のMySQL-3.23.58にSJISでデータをやり取りし
ていますが、別に問題ないのでそのまま使っています。
クライアント側とサーバ側の文字セットは一致している方が好ましいとは思いま
すが、クライアントがUTF-8ということであれば、最初の投稿のとおりMySQL-4.1
以降でないとサポートしていないので、このまま行くしかないでしょう。


>> SHOW VARIABLES LIKE 'char%';
> 
> を実行してみますと、下記のデータが表示されました。
> 
> 「character_set」:
> 「ujis」
> 
> 「character_sets」:
> 「ujis big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr
> gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1
> latin1_de latin2 latin5 sjis swe7 tis620 usa7 win1250 win1251ukr
> win1251」
> 
> この一覧によると、データベースの文字コードはEUC-JP(ujis)に設定されているみたいです。
> 私の理解では、MySQLサーバと通信するクライアントは、PHPで実行する場合、PHPになる
> ものだと思っております。そのため、PHPを処理する環境がUTF8であれば、MySQLサーバに
> はUTF8で処理コマンドが送信されていると考えられます。
> 
> その場合、MySQLサーバがUTF8に対応していない、又は文字コードがUTF8以外であれば、
> (この場合はujisになっておりますが。)
> 異なる文字コードで処理されるということになるため、日本語が正しく処理できないのではない
> かと思います。
> 
> しかし、「ウィキペディア(Wikipedia)」(http://ja.wikipedia.org/)も下記の様にMySQL4.0.x
> のバージョンを利用しております。
> 
> MediaWiki: 1.9alpha (r18574)
> PHP: 5.1.2 (apache)
> MySQL: 4.0.26-max-log
> 
> しかし、UTF8に対応していないはずのMySQL4.0.xを利用してMediaWikiは運用されており
> ます。その他にも「WordPress」自身もUTF8でコードが書かれているはずですが、なぜ問題
> なく運用し続けることができているのでしょうか。
> 
>  phpMyAdmin 2.6.2-pl1にて確認しますと、「Language」をEUC-JPに設定してデータの一覧を
> 取得しますと、確かに文字化けしております。
> 
> しかし、UTF8に設定して一覧を取得してみますとEUC-JPで保存しておいたデータが文字化け
> を起こし、逆にUTF8で処理を行っていたPHPアプリケーションは文字化けせずに表示されました。
> 
> おそらく、この内容から推測できることとしましては、他の文字コードについても同じことが言える
> のではないかと考えられます。
> 
> となりますと、MySQL自体はどのように文字コードを認識しているのかについて難しく考えられ
> ます。


PHP-users メーリングリストの案内