あらゆる種類の言語の単語を含む MySQL データベースがあるため、テーブルの列を「utf8_unicode_ci」に設定しました。UTF-8 には可能なすべての文字を含めることができ、unicode_ci には正しい並べ替え (およびパフォーマンスの低下) もあります。phpMyAdmin でテーブルを参照すると、すべての特殊文字が問題ないように見えます。問題は、一連の名前を SQL SELECT して Web サイトに表示すると、文字が表示されない/正しくエンコードされない (Chrome では疑問符、Explorer では四角のように見える) ことです。サイトに適したエンコーディングを
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8">
使用しています。ページに貼り付ければ、あらゆる種類の文字を表示することもできます。問題は、データベースからそれらを取得するときにのみ表示されます。php mysqli_query() はエンコーディングを変更しますか、それとも SELECT クエリが何らかの形で混乱させますか?
2285 次
3 に答える
2
@user4035 の意図は正しいのですが、実装と推論の両方が間違っています。
- エラーを無条件にブラウザに出力しないでください。プログラマーには表示されませんが、ユーザーには何の関係もありません。
SET NAMES 'UTF8'
機能と等しくありませんset_charset()
。前者は特定の SQL クエリであり、後者の関数を優先して使用するべきではありません。
より良いバージョンは次のようになります。
set_charset()
メソッドを使用して接続文字セットを設定する必要があります。
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
$con=mysqli_connect("host", "user", "pw", "db");
$con->set_charset("utf8");
于 2013-09-09T15:20:53.623 に答える
0
試す:
mysql_query("SET NAMES 'utf8'", $con);
前
mysql_select_db("asdasd", $con);
于 2013-09-09T15:07:51.283 に答える
0
SET NAMES 'UTF8'
MySQL に接続してから使用してみてください。
$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}
/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $con->error);
}
マニュアルが言うように:
SET NAMES は、クライアントが SQL ステートメントをサーバーに送信するために使用する文字セットを示します...また、サーバーがクライアントに結果を返すために使用する文字セットも指定します。
于 2013-09-09T15:09:01.700 に答える