これが2つの答えです。
これは、DSNで、またはMYSQL_ATTR_INIT_COMMAND(接続オプション)として設定できます。
DSNの方が優れていると思います。
$connect = new PDO(
"mysql:host=$host;dbname=$db;charset=utf8",
$user,
$pass,
array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"
)
);
UTF-8
を指定した場合 utf8_general_ci
のデフォルトの照合を使用しています 、dbテーブルまたはフィールドが別のものを使用していない限り。
サーバー全体がこのデフォルトの照合で応答するようにする場合は、構成ディレクティブを使用します。
collation_server=utf8_unicode_ci
character_set_server=utf8
したがって、接続時に毎回指定する必要はありません。
照合は文字の並べ替えに影響し、データベースのテーブルとフィールドに設定されます。これらの設定は、テーブルをクエリするときに尊重されます。それらが設定されていることを確認してください。データベースで照合が設定されているUTF-8名を使用してください。
あなたのコメント:
MySQLマニュアル から引用しましょう これを証明するには:
私の答え:テーブルがこれを明示的に変更しない限り、暗黙的に機能します。
コメントからの質問:
例:列の照合はテーブルの照合をオーバーライドします
CREATE TABLE t1
(
col1 CHAR(10) CHARACTER SET utf8 COLLATE utf8_unicode_ci
) CHARACTER SET latin1 COLLATE latin1_bin;
列にCHARACTERSETXとCOLLATEYの両方が指定されている場合は、文字セットXと照合Yが使用されます。列の文字セットはutf8
です。 および照合utf8_unicode_ci
テーブルがlatin1+latin1_binにある間、テーブル列で指定されているとおり。
例:一般的にテーブル照合が使用されます
列/フィールドで照合が明示的に指定されていない場合は、テーブルの照合が使用されます。
CREATE TABLE t1
(
col1 CHAR(10)
) CHARACTER SET latin1 COLLATE latin1_bin;
col1には照合latin1_binがあります。
utf8_unicode_ci
が必要な場合 照合、一般的なテーブルまたは列/フィールドに設定します。