0

私は何時間もウェブを検索してきましたが、何も役に立たないようです。PHP5.3とMySQL5.1を使用していたとき、これは正常に機能していました。これらの両方をアップグレードしたとき、UniCode文字を含むフィールドに対して行われた選択では空白の結果が得られることに気付きました。

テーブルはUTF8に設定されており、特にフィールドも念のためUTF8に設定されています。ドキュメントのヘッダー領域にcharset=utf-8があります。

私は自分のフォーラムに2つのテスト投稿を作成しました。1つはストレートテキストで、もう1つは中引用符で構成されています。次に、2つの行をフェッチするための単純なPHPクエリを作成しました。コードの要点は次のとおりです。

<?php

$con = mysql_connect("XXXXX","XXXXX","XXXXX");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("XXXXX", $con);


echo "<br />";
echo "<br />";
echo "PHP 5.4.9 having issues displaying UniCode characters. MySQL 5.5.28.3. FastCGI has been removed. IIS.";
echo "<br />";
echo "<br />";


$result1 = mysql_query("SET NAMES 'utf8'");


$result = mysql_query("SELECT post_body from ubbt_posts where post_id = 358826");

while($row = mysql_fetch_array($result))
  {
  echo "Post Body without unicode: " . $row['post_body'];
  echo "<br />";
  echo "<br />";
  }


$result = mysql_query("SELECT post_body from ubbt_posts where post_id = 358825");

while($row = mysql_fetch_array($result))
  {
  echo "Post Body with unicode: " . $row['post_body'];
  echo "<br />";
  echo "<br />";
  }

mysql_close($con);

?>

動作は、非Unicode投稿が正しく表示されることです。もう1つはまったく表示されません。引用符の代わりに正方形やブロックが表示されるわけではありません。何も表示されません。

mysql_fetch_arrayをmysql_fetch_assocに変更してみました。それは役に立ちませんでした。欲求不満からutf8_encodeを試しましたが、それも役に立ちませんでした。

IIS / PHP 5.4.9 / FastCGIの組み合わせに問題がある人がいることを読んだので、FastCGIを削除しました。少なくとも私は最善を尽くしました-ファイルはすべてなくなり、IISは再びphp-cgi.exeファイルを指しています。しかし、PHPは依然としてFastCGIを使用していると報告しています。レジストリに何かが表示されているに違いないと思いますか?しかし、いずれにせよ、ファイルはなくなっているので、実際にはそうすることはできません。そしてそれは役に立たなかった。

私はそれを機能させるために、この時点でワイルドなアイデアでさえ試してみます。何かご意見は?

更新:

これをPHPとASPの両方でテストしました。どちらの言語も同じ動作をします。更新されたコードを含む私の結果セットは、次の結果をもたらします。

Unicodeなしの投稿件名:Unicodeなしのテスト投稿

Unicodeなしの投稿本文:通常の文字だけを含むテスト投稿と、テスト用のxyzzy。

ボディフィールドの長さ:74

ユニコードを使用した投稿件名:ユニコードを使用したテスト投稿

ユニコード付きの投稿本文:

ボディフィールドの長さ:0

したがって、長さがチェックされていると、ASPとPHPの両方がそのフィールドの長さがゼロであると報告します。

問題が発生しているのはODBCでしょうか?削除しようとしても、FastCGIが干渉している可能性はありますか?

更新2-

これを修正するために私がしなければならなかったのは、バックアップから、すでにUTF8として設定されているテーブルとUTF8に設定されているフィールドにデータを再ロードすることです。次に、接続直後のコードでsetnamesutf8コマンドを実行する必要がありました。ここではFastCGIが関与していないと思います。FastCGIを再インストールしたときも問題はありませんでした。まだいくつかの問題が残っていますが、テーブルセットとリロードでほとんどの問題が処理されたと思います。

リサ

4

1 に答える 1

0

別の方法でutf8を設定してみてください-

mysql_set_charset('utf8', $con);

これの代わりに-

mysql_query("SET NAMES 'utf8'");

メソッド$conで作成された接続はどこにありますかmysql_connect()

注-PDOまたはを使用してみてくださいmysqli

于 2012-12-27T03:43:53.077 に答える