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

MITSUYA MAEDA mitsuya.maeda @ gmail.com
2006年 12月 28日 (木) 10:31:50 JST


YuGo様

前田です。
貴重なご意見を頂きまして誠に有難う御座います。
確かに考え方としましては、任意のクライアントから送られてきたデータが、
MySQLサーバ自身の文字コード以外のもので、そのデータをMySQLサーバ
に格納したとき、MySQL側からすれば、送られてきたデータの文字コードが
常に同じであれば、MySQLサーバが解釈している文字列として、データの
検索をしているだけの単純作業を行っているだけということでしょうか。

確かにクライアント側で利用する文字コードが一定であれば、サーバに格納さ
れているデータがサーバ自身が処理で扱う文字コードと異なっていても、
サーバ自身がそのデータの意味を理解する必要があるわけではありませんから、
処理自体には問題がないということですね。

となりますと、サーバにアクセスするクライアントが異なっていても文字コード
さえ合わせておけば、処理による問題は生じないという考え方ができるようにな
ります。

#パパぱふぅさんのコメント
> MySQLは 4.1 以降でキャラクタセットの概念を持つようになりました。
> それ以前のバージョンでは、たとえば VARCHAR フィールドで UTF-8 でも
> Shift_JIS でも EUC-JP でもお構いなしに使うことができました。
> その代わり、コード変換は、アプリ側で責任をもって行うルールでした。

パパぱふぅさんのコメントの内容がよく理解できるようになりました。
しかし、UTF8とujisでは文字コードをあらわす値の長さが異なるのでは
ないかと思います。

その場合、フィールドの文字数の指定を行った場合、ujisで行った設定では、
UTF8のデータは指定した文字数の最大文字数を入力した場合、切れてしまう
という問題が発生するのではないかと思います。

皆様はこの問題についてどのようにお考えになられているのでしょうか。
大変お忙しい中ではありますがご意見、アドバイスをお願いいたします。

よろしくお願いいたします。

06/12/27 に YuGo<yu.gotou @ gtec-ni.com> さんは書きました:
> 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 mailing list  PHP-users @ php.gr.jp
> http://ml.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>


-- 
前田 光哉 (MITSUYA MAEDA)
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
◆準備中
◆◆mitsuya.maeda @ gmail.com


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