2012-02-27 12 views
3

この質問の定義があまりにも非特異的に思えるかもしれないことを知っていますので、関連するすべてのデータを提供しようとします。MySQLのコード化の問題(と基本)

私はホストのように振る舞っています。 MySQLに対抗するPHPページがあります。誰かがMySQLインスタンス上で何らかの操作をして、問題のある文字(ñ、アクセントなど)を視覚化する問題を引き起こしています(それはすべてミステリーです)。

私は多くのオプションをテストしましたが、私の知識の欠如が私を盲目にすると思います。私はそれが一般的であることを知っているので、多分何らかの「チェックリスト」を作ることができます。私はMySQLインスタンス上で '状況' を入力した場合

は私が取得:UTF8で

Server version:   5.5.15 MySQL Community Server (GPL) 
Protocol version:  10 
Connection:    localhost via TCP/IP 
Server characterset: utf8 
Db  characterset: utf8 
Client characterset: utf8 
Conn. characterset: utf8 
TCP port:    3306 

すべて...素晴らしいです!私は、変数をHeidiSQLと接続し、検査した場合、私は得る:

character_set_client  utf8 
character_set_connection utf8 
character_set_database utf8 
collation_collection  utf8_general_ci 
collation_database  utf8_general_ci 

そしてなどなどしかし、残念ながらページを訪問するように奇妙な文字を返します。 METAタグ内のコンテンツ文字セットもUTF-8です。

いくつかの文字セットで接続が強制的に行われるようにするために、いくつかの変更をコードで行うことができます。しかしそれとは別に、最も信じられないことは、ページが機能していたことです。

誰もがこの動作を誘発するためにサーバーで変更されたベンを知っていますか?

ありがとうございました!

PS:私たちは、特にサーバー構成に起因する側面に興味があります。クライアントのソースコードの変更は、私たちが避けたいものです。

+0

これまでは動作していましたが、現在は動作を停止していますか?私は上手く理解できていない気がします。 –

+0

はい、私たちは誰かが行った操作のためだと信じています...だから、これにつながる設定更新の種類を知りたいのですが。ありがとうPekka :) – IoChaos

答えて

2

HTTPヘッダーはどうですか?ヘッダーが文字エンコーディング定義の場合、メタ定義は適用されません。

DBとDBのテーブルに接続した後、実行します:あなたのコードは、おそらくあなたの問題につながること、UTFに文字セットを設定せずにMySQLのにデータを入力した場合

+0

HTTPヘッダーについてもっと知りたいのですが。 HTTPインスペクタを使用すると、UTF8が受け入れられたcharsetとして返されますが、何も返されません。 – IoChaos

+0

レスポンスヘッダーにContent-Type:[...]があるはずです。 –

+0

表示:コンテンツタイプ\t text/html; charset = utf-8 – IoChaos

2

mysql_set_charset ('utf-8'); 

デフォルトの通信PHPとMySQLの間のcharsetはまだUTF-8ではありません。

+1

'PHPとMySQLの間のデフォルトの通信文字セットはまだUTF-8ではありません.'これはmySQL設定のUTF-8に強制されているかどうかわかりません。 –

+1

ありがとうfred2。問題は、その動作がサーバーの一部の変更によって発生していることです。アプリケーションクライアントコードを変更して、回避したいコードを作成します。 – IoChaos

+1

私にはいくつかのことを明確にすることができますか?どのように 'mysqlインスタンス上の操作'が起こったのですか?例えば、コマンドラインから直接mysqlに、またはmysqlダンプファイルからのインポートを介して、phpMyAdmin経由で、あるいは他のクライアント経由で直接実行されましたか?この操作の前に、データベースに存在する破損した文字データを表示しているデータ(この場合は、誤った文字セットを表示しているサーバーの場合)または操作の前後に導入されたデータです(この場合、データベースが間違った文字セットに入っていて、それを修正する方法がないのでしょうか? – fred2