2017-01-21 57 views
0

看这里:http://www.php.net/manual/en/mysqlinfo.concepts.charset.php是PDO ... SET NAMES utf8危险吗?

据我所知,使用

SET NAMES UTF8

是不是一个好主意,但目前尚不清楚:

  1. 是什么问题?
  2. 如何避免它?
  3. 哪个实际上是在PHP 3.6或更高版本中设置(或全部)PDO连接的字符集的解决方案?

恐怕代码是危险的:

$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

链接页面提供了一个非常深入的推理,它是什么意思。请阅读! – hjpotter92

回答

2

你真的还在使用PHP> =版本3.6和< 5.3.6吗?

假设你有5.3.6或更高版本...

Character setsPDO_MYSQL DSN 说,你应该使用

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

,并暗示(未不够清楚),其utf8utf8mb4更换如果适当。

PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'不是很好,但是是5.3.6之前的替代品。

我觉得“危险”的词太强了,甚至在5.3.6之前。

相关技术:在my.cnf使用init_command = SET NAMES ...不好因为init_commandroot连接时,不执行。

utf8mb4对于UTF-8是首选的CHARACTER SET,因为它包含Emoji和utf8中缺少的一些中文字符。该字符集可从MySQL 5.5.3版开始使用。

+0

Oook,我实际上使用PHP 5.6。所以你的解决方案必须工作......但我已经尝试了两种,utf8mb4和utf8 ......没有工作。我会再来一次。但是,如果它实际上并不危险,它会保持现在的状态(我之前粘贴的代码)。 非常感谢! – eMarine