2015-12-25 13 views
8

今私はちょっと混乱しています。私はcharset=utf8 とPDO接続しており、DBはlatinを使用しています。PHPとMySQLの間の文字セット

これはどういう意味ですか?

私の考えは、PHPがDBから送受信したすべての接続がutf8にエンコードされていることを意味します。しかし、私はDBもPHPと同じ文字セットを使用すべきであることをたくさん読んでいます。

誰でも、PHPとMySQL DBの文字セットの役割について詳しく説明してくれる人と、それらを整列させるメリットは何ですか?

+0

最も多くの外国語。興味のある方はhttp://htmlpurifier.org/docs/enduser-utf8.html#whyutf8 – devpro

答えて

2

セイPHPこのクエリの基本的な意図が速い茶色のキツネは、のろまなイヌに飛びかかった文字列を保存するためにMySQLを伝えることは明らかである

INSERT INTO `some_table` ("foo") VALUES 
('The quick brown fox jumps over the lazy dog'); 

のようなものは、MySQLにはいくつかのテキストが格納されて送信さデータベースに格納します。

PHPがUTF-8を使用するように設定されている場合、人が読める文字をバイナリに変換してMySQLに送信すると、UTF-8エンコーディングシステムを使用して文字が変換されます。
MySQLはUTF-8でエンコードされた文字を読み取ることができるので、デジタルでエンコードされたシーケンスが人間が読める文字でTheなどを意味することは理解できません。
MySQLのは、それが文字列を受信したとき、それはハードディスクにデータを保存する前にlatin1の同等物へのUTF-8エンコーディングから文字を変換します、latin1の使用some_tableテーブルにデータを格納するように構成されている場合。
英語のアルファベット文字はUTF-8とLatin1の両方で表現できるため、この場合は問題ありません。
PHPの送信文字列に、Latin1ではなくUTF-8でしか表現できない文字が含まれていると問題が発生します。スマートな引用。 MySQLがスマート・クォートをデジタル形式に変換しようとすると、Latin1に文字通り、を表すデジタル・エンコーディングが定義されていないため、変換できません。
この状況に遭遇したときのMySQLの正確なエラー管理プロセスと、状況が回復可能かどうかはわかりませんが、最終的な結果は基礎となるエンコーディングが壊れて使用できなくなることです。
この問題は、2つのシステムで表現できない文字の場合にのみ発生します。すべての通信の99%に英語の文字が含まれていると、しばらくの間問題が発生していなくても、あなたが問題を通知したときに回復しようとすると、イライラする可能性があります。

+0

を読んでみてください。これはすばらしいことです。しかし、私はphpでutf8を使用する場合は私はほぼ20列と2000行のDBを使用してパフォーマンスを節約しようとしているにもかかわらず、私はMySQLで同じを使用することをお勧めしたいと思った。そして、私はちょうど英語を使っています(将来変わるかもしれません) – moawaya

+0

クールです。 MySQLを切り替えるとパフォーマンスの問題が発生するのはなぜですか?しかし、あなたが心配していたなら、いつでもDBをセットアップして、古いMySQLの文字セットと新しいMySQLの文字セットでクエリを実行することができます。私の理解は、MySQLがv6をリリースするときです。0 UTF-8はデフォルトの文字セットを先に進めるでしょう –

+0

切り替えは、それ自身が遅くなるクエリを発行しません。私の理解はUTF8がラテン文字よりも多くのスペースを必要とするので、クエリが遅くなります。私が間違っていて、私の状況について私に最後の提案をしてください。私はDBが小さいと知っています。すべてのカップのパワーをクエリーに吸い込む必要があります。 – moawaya