我最近为许多项目切换到 PDO(使用 mysql/i 驱动程序的时间太长了)并且遇到了 PDO Mysql 驱动程序和字符集的奇怪行为。我在 StackOverflow 上发现使用 pdo 和 mysql 初始化 utf8 连接的正确方法是Charset=utf8
在 DSN 末尾添加。然而这个参数在 5.3.6 之前的 php 版本中被忽略了。由于我正在开发一个cms,我不知道它将在哪个环境中运行;我正在寻找一种使其兼容的解决方案。
我发现的第一个答案是使用$PDO->exec("SET NAMES utf8");
这与发出查询是否相同,所以它会与转义函数混淆。
第二个答案是设置PDO::MYSQL_ATTR_INIT_COMMAND
为SET NAMES utf8
,所以这不是和以前一样吗?(所以打破转义功能?)
其实我对此有点困惑,所以我决定寻求帮助。我也想到了两种解决方案:
1) 构建一个抽象层,如果 PHP < 5.3.6 使用 mysqli 驱动程序代替
2) 每次数据通过套接字时,使用另一个字符集和编码/解码
谢谢