Featured Posts

CentOS LAMP Setup 很土鳖的问题,浪费我几个小时,终于搞定! 在 CentOS 下使用 xampp 的集成套件搭建 LAMP 环境,启动 Apache 后,用浏览器访问 web 程序,居然提示下载源文件!! 也就是...

Readmore

看看我写的 GFW 小故事 我是一个乖孩子,喜欢上网跟朋友们聊天、玩游戏 警察叔叔说,网上很黄很暴力,我却很傻很天真,不让我再看到我最爱的网站 直到有一天,一个无辜的小鸟被无情地封杀,我才意识到问题的严重性 面对河蟹坚硬的钳子,小鸟不能改变什么,唯一能做的,就是送上几句脱口秀解解气 据说那个墙,又黑又高,看到朋友们发来的结构图,我哭了 我再也看不见可爱的...

Readmore

Apache ReWrite QUERY_STRING 问号 ? 看一条应用中简单的 rewrite 规则: 将请求: http://www.leakon.com/soft/install?ver=2.0 rewrite 为: http://www. leakon.com/my/soft/install.php 配置文件 httpd.conf...

Readmore

  • Prev
  • Next

Symfony 数据库连接 utf8

Posted on : 03-06-2007 | By : leakon | In : Web开发, 原创

0

$connection = Propel::getConnection();
$query = 'SET NAMES "utf8"';
$statement = $connection->prepareStatement($query);
$resultset = $statement->executeQuery();
?>

Symfony 在处理 PHP 与 MySQL 连接的时候,用的可能是 latin1 编码,也就是说,用户在表单里提交一个多字节字符串,比如“你好”,经历了如下几步,才进入到数据库:

1、浏览器把用户在输入框输入的内容按 utf8 编码,然后提交到服务端,PHP 接收到这个字符串;
2、PHP 建立 MySQL 连接,这个时候,用的是默认连接,如果当时 MySQL 服务器的连接编码是 latin1(通常默认都是 latin1),那么,PHP 会把接收到的字符串按 latin1 转码,然后传输给数据库;
3、数据库接收到这个字符串,要把它存到表里,由于接收过来的是 latin1 编码的字符串,则就按照这个编码存到表里。

这时会有个问题,数据库、表、字符串字段都是 utf8_general_ci 的编码方式,用 phpMyAdmin 查看,按说是能正常看到中文的。但是,由于 PHP 与 MySQL 是用 latin1 通讯,所以存到表里的是 latin1 字节序的字符,因此得到的是乱码。但是并不妨碍前端显示,因为在 PHP 取数据的时候,会按 latin1 -> utf8 的转换方式还原回来。虽然可以在前端页面正常显示,但我们维护数据库,备份、导入导出的时候看到一大堆乱码,显然很麻烦。

所以,有了最开始的那串代码,它的作用是,让 PHP 与 MySQL 用 utf8 编码方式进行通讯,数据库在往表里写入的时候,就是按照 utf8 字节序写的,因此我们用 phpMyAdmin 或者导出数据库文本文件的时候,都可以正常看到中文。

才疏学浅,不知所云

Write a comment