【发布时间】:2013-09-06 14:56:51
【问题描述】:
我最近为许多项目切换到 PDO(使用 mysql/i 驱动程序的时间太长了),并且在使用 PDO Mysql 驱动程序和字符集时遇到了奇怪的行为。
我在 StackOverflow 上发现使用 pdo 和 mysql 初始化 utf8 连接的正确方法是在 DSN 末尾添加Charset=utf8。然而这个参数在 5.3.6 之前的 php 版本中被忽略了。
由于我正在开发一个cms,我不知道它将在哪个环境中运行;我正在寻找使其兼容的解决方案。
我找到的第一个答案是使用$PDO->exec("SET NAMES utf8");
这和发出查询不一样吗,所以,它会与转义函数混淆。
第二个答案是把PDO::MYSQL_ATTR_INIT_COMMAND设置为SET NAMES utf8,这样不就和以前一样了吗? (所以打破转义函数?)
实际上我对此有点困惑,所以我决定寻求帮助。我也想到了两种解决方案:
1) 构建一个抽象层,如果 PHP
2) 每次数据通过套接字时,使用另一个字符集和编码/解码
谢谢
【问题讨论】:
-
不确定您所说的“用转义函数搞砸了”是什么意思。该查询中没有任何内容需要转义。
-
按照PHP manual 中的说明使用
SET NAMES utf8不会影响mysql(i)_real_escape_string()或PDO::quote()等转义函数 -
无论如何你都不应该使用手动引用。
标签: php mysql pdo character-encoding