4

show variables:

character_set_client        utf8
character_set_connection    utf8
character_set_database      utf8
character_set_filesystem    binary
character_set_results       utf8
character_set_server        latin1
character_set_system        utf8
collation_connection        utf8_general_ci
collation_database          utf8_unicode_ci
collation_server            latin1_swedish_ci

挿入されたデータは UTF-8 であり、データベースで正しく表示されます。html ヘッダーは utf-8 に設定され、メタタグは utf-8 に設定されます。データベースからのコンテンツではなく、サイト上のすべてのコンテンツ (データベースからのものではない) が正しく表示されます)。

接続 (PDO):

$pdo = new PDO("mysql:host=$hostname;dbname=$database;charset=utf8",$username,$password,array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));

show variablesしたがって、サーバーの文字セットと照合順序が utf-8 ではないことが示されているため、出力と関係があると思いますか? ただし、同じローカル サーバーで他のサイトを問題なく実行しています。私はそれを正しくするためにどこを見ることができますか?

4

1 に答える 1

3

PDO接続の場合:

new PDO(
    "mysql:host=$hostname;dbname=$database;charset=utf8",
                                           ############
    $username, $password, array(
        PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
                                         ##############
    )
);

SET NAMES utf8非推奨のSQLを使用しています。もう使用しないでください。そして実際には、推奨される方法であるPDODSN文字列のcharsetパラメーターをすでに使用していますcharset=utf8

initコマンドを削除するだけで、SET NAMES utf8問題はありません。

new PDO(
    "mysql:host=$hostname;dbname=$database;charset=utf8",
    $username, $password
);
于 2012-10-29T21:41:35.133 に答える