gpt4 book ai didi

php - PDO ... SET NAMES utf8 危险吗?

转载 作者:行者123 更新时间:2023-11-29 05:09:36 25 4
gpt4 key购买 nike

看这里:http://www.php.net/manual/en/mysqlinfo.concepts.charset.php

我明白使用

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'
));

谢谢!

最佳答案

你真的还在使用 PHP >= version 3.6 and < 5.3.6 吗?

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

Character setsPDO_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 之前也是如此。

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

utf8mb4 是 UTF-8 的首选 CHARACTER SET,因为它包括表情符号和 utf8 中缺少的一些汉字。该字符集从 MySQL 版本 5.5.3 开始可用。

关于php - PDO ... SET NAMES utf8 危险吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41782226/

25 4 0