Опасно ли PDO … SET NAMES utf8?

Глядя на здесь: http://www.php.net/manual/en/mysqlinfo.concepts.charset.php

Я понимаю, что с помощью

SET NAMES utf8

не очень хорошая идея, но не понятно

  1. В чем проблема?
  2. Как этого избежать?
  3. Каково на самом деле решение для установки кодировки для (или всех) соединений PDO в PHP 3.6 или выше?

Код, который я боюсь, опасен:

$this->_conn = new PDO('mysql:host=host.name.blabla;dbname=my_database_name','username', 'password',array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE    => PDO::ERRMODE_EXCEPTION,
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
));

Спасибо!

1

Решение

Вы действительно все еще используете PHP> = версию 3.6 и < 5.3.6?

Если у вас есть 5.3.6 или более поздняя версия …

Наборы символов
а также PDO_MYSQL DSN
скажи, что ты должен использовать

$pdo = new PDO("mysql:host=localhost;dbname=mydb;charset=utf8",
'my_user', 'my_pass');

И подразумевает (не достаточно ясно), что utf8 должен быть заменен utf8mb4 если уместно.

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8' не так хорошо, но была альтернатива до 5.3.6.

Я думаю, что слово «опасный» слишком сильное, даже до 5.3.6.

Связанная техника: использование init_command = SET NAMES ... в my.cnf плохо так как init_command не выполняется при подключении как root,

utf8mb4 является предпочтительным CHARACTER SET для UTF-8, потому что он включает эмодзи и некоторые китайские иероглифы, которые отсутствовали в utf8, Эта кодировка доступна начиная с версии MySQL 5.5.3.

2

Другие решения

Других решений пока нет …