Ето отговор две в едно.
Можете да зададете това в 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;
Ако в колона са посочени и двата символа X и COLLATE Y, се използват набор от знаци 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
сортиране, задайте го на вашите таблици като цяло или на колоните/полетата.