Глядя на здесь: http://www.php.net/manual/en/mysqlinfo.concepts.charset.php
Я понимаю, что с помощью
SET NAMES utf8
не очень хорошая идея, но не понятно
Код, который я боюсь, опасен:
$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'
));
Спасибо!
Вы действительно все еще используете 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.
Других решений пока нет …