【发布时间】:2016-01-10 22:26:14
【问题描述】:
我使用 ZF2 和一个 mysql 数据库。 问题是数据是 latin1 编码的,但目前我不必更改它。 所以我使用了很多技巧来强制我的 PDO 驱动程序在 UTF-8 上得到我的结果:
local.php 中的这个:
return array(
'db' => array(
'username' => $dbParams['username'],
'dsn' => 'mysql:dbname='.$dbParams['database'].';host='.$dbParams['hostname'].';charset=utf-8',
'password' => '',
'charset' => 'utf-8',
),
);
还有这个在 global.php 中
return array(
'db' => array(
'charset' => 'utf-8',
'driver' => 'Pdo',
'driver_options' => array(
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8",
PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET UTF8",
),
),
'service_manager' => array(
'factories' => array(
'Zend\Db\Adapter\Adapter' => 'Zend\Db\Adapter\AdapterServiceFactory',
)
),
'translator' => array(
'locale' => 'fr_FR'
),
);
但是当我这样做时:
echo "ENCODING=".mb_detect_encoding($myDataBaseRetrievedVar);
这告诉我:ASCII!对于特殊字符,我不能做 json_encode。
【问题讨论】:
-
数据库本身是utf8编码的吗?尝试运行查询
SHOW CREATE TABLE yourTableHere。 -
不,数据库是 Latin1 编码的,正如我所说的那样。但我暂时不能碰它……
-
数据库charset,数据库collation(charset与collation不同)和SQL连接都应该是同一个charset。
-
MySQL 编码称为
utf8,而不是utf-8。你从那里开始怎么样? -
我已经完成了更正,但问题始终存在。
标签: php mysql pdo utf-8 zend-framework2