Я имел это ранее в моем обычном соединении mysql_ *:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Нужно ли это для PDO? И где я должен это иметь?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Ответы:
Это будет в вашей строке подключения, например:
ОДНАКО до PHP 5.3.6 опция charset была проигнорирована. Если вы используете старую версию PHP, вы должны сделать это так:
источник
До PHP 5.3.6 опция charset игнорировалась. Если вы используете старую версию PHP, вы должны сделать это так:
источник
Это, наверное, самый элегантный способ сделать это.
Прямо в вызове конструктора PDO, но избегая ошибочной опции charset (как упомянуто выше):
Прекрасно работает для меня.
источник
array(1002 => 'SET NAMES utf8',...)
.charset=utf8
в строку DSN работает! Я пытался выяснить проблему по адресу groups.google.com/d/msg/auraphp/syMS26Rz-q8/9laQr9tR4EoJДля полноты, есть три способа установить кодировку при подключении к MySQL из PDO, и какой из них доступен, зависит от вашей версии PHP. Порядок предпочтения будет:
charset
параметр в строке DSNSET NAMES utf8
сPDO::MYSQL_ATTR_INIT_COMMAND
опцией подключенияSET NAMES utf8
вручнуюЭтот пример кода реализует все три:
Выполнение всех трех действий, вероятно, является излишним (если вы не пишете класс, который вы планируете распространять или использовать повторно).
источник
Я просто хочу добавить, что вы должны убедиться, что ваша база данных создана с COLLATE utf8_general_ci или любым другим способом сортировки, который вы хотите использовать, в противном случае у вас может получиться другой, чем предполагалось.
В phpmyadmin вы можете увидеть параметры сортировки, щелкнув базу данных и выбрав операции. Если вы попытаетесь создать таблицы с другим сопоставлением, чем ваша база данных, ваши таблицы все равно получат сопоставление базы данных.
Поэтому убедитесь, что сопоставление для вашей базы данных прямо перед созданием таблиц. Надеюсь, это сэкономит кому-то несколько часов LOL
источник
Я думаю, что вам нужен дополнительный запрос, потому что опция charset в DSN фактически игнорируется. см. ссылку, размещенную в комментарии другого ответа.
Рассмотрим, как Drupal 7 делает это в http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__construct/7 :
источник
источник
источник
Я проверяю этот код и
источник
$ con = new PDO ("mysql: host = $ dbhost; dbname = $ database; charset = $ encoding ", "$ dbuser", "$ dbpassword");
источник