多字符集的数据库连接问题

#1 syber

今天实现一个功能时候发现了这个问题

a表字符集是utf8,b表字符集是gbk,
并且在同一个action里面用到这两个表的数据。
spconfig里面默认字符集是utf8。
代码如下:
main.php
 
class main  extends spController
{
function index()
{
$table_a = spClass('a')->findAll();
//point 1
$table_b = spClass('b')->findAll();
}
}

这种情况b的数据肯定不正常的。通过在上面代码//point 1中插入如下代码
 
$tmp = $GLOBALS['G_SP']['db'];
$GLOBALS['G_SP']['db']['names'] = 'gbk';
//do something

$GLOBALS['G_SP']['db'] = $tmp;

企图实例化b之前,能对连接数据库的字符集设置为gbk,
或者//point 1以后的内容修改为:
$table_b = spClass('b');
$table_b->runSQL('set names gbk');
$row = $table_b->findAll();

查询之前先设置字符集。
两种方法都不能取得表b的正常字符集数据。

像这种问题,应该怎样解决?

2010-10-24 03:04:11

#2 jake

首先我们确定:一般PHP程序都只有一种编码,看看各种论坛或者CMS都能明白。

以上的问题,可以用转码的方式来解决。比如说原程序是UTF8,然后在读取GBK的数据库后,对获取到的数据进行 ICONV或者mb_*系列 函数来转换成UTF8即可。

当然转码的方式会带来少许的资源开销,但是这也是为什么PHP程序一般只用一种编码的原因。

PS:此贴将转移到“求助问答”区。

2010-10-24 10:28:17