symfony写进MySQL中文乱码问题
MySQL4.1以后引入了字符集的概念,使得MySQL在国际化方面更进一步,但是对于开发者来说,存在一个很严重的问题,就是像中文这样的东亚文字等存进数据库,数据库默认用拉丁字符集存储,需要在连接数据库后使用set names utf8(注意utf和8之间没有连接的'-'符号),才能正常的存储,不出现乱码。
symfony并没有这样的配置,比如在yml配置文件里给一个文字编码信息,所以需要我们手工的去整合进系统,如何整合?现在还没有一个很好的办法,我的解决方案是:
在app的config文件夹中的filters.yml文件里写入:
myUtf8ConnectionFilter:
class: myUtf8ConnectionFilter
activate: on
然后去app的lib下新建一个类myUtf8ConnectionFilter.class.php
<?php
class myUtf8ConnectionFilter extends sfFilter
{
public function execute($filterChain)
{
$con = Propel::getConnection();
if ($con){
$con->executeQuery("set names utf8");
} else {
throw new Exception($e);
}
$filterChain->execute();
}
}
?>
这个方法能很好的完成我需要的功能,但是也存在一点不足,这个滤镜是对ececute方法过滤重写,每次ececute就先set names utf8一下,似乎有点浪费,其实只需要在连接数据库的时候做一次set names utf8就好了。所以有时间去改写一下connect的滤镜。