在mysql查询中转换charset

时间:2010-04-23 22:46:33

标签: php mysql joomla character-encoding

我有一个关于从mysql查询中转换字符集的问题。

我有2个数据库。一个用于网站(joomla),另一个用于论坛(IPB)。 我正在从joomla内部进行查询,默认情况下有“SET NAMES UTF8”。 我想查询论坛数据库中的一个表。一个名为“ibf_topics”的表。该表具有latin1编码。

我执行以下操作从not-utf8表中选择任何内容。

//convert connection to handle latin1.
$query = "SET NAMES latin1";
$db->setQuery($query);
$db->query();

$query = "select id, title from other_database.ibf_topics";
$db->setQuery($query);
$db->query();
//read result into an array.

//return connection to handle UTF8.
$query = "SET NAMES UTF8";
$db->setQuery($query);
$db->query();

之后,当我想使用选定的图块时,我使用以下内容:

echo iconv("CP1256", "UTF-8", $topic['title'])

问题是,无论如何要避免所有这些麻烦吗? 目前,我无法将论坛数据库更改为UTF8,我无法将joomla数据库更改为latin1:S

3 个答案:

答案 0 :(得分:2)

你可以打开2个数据库连接,1个用于joomla,1个用于IPB。您将使用更多资源,但它将使您的代码更易于阅读,并且您可以在数据库设置中执行所有配置(字符集等)。这也可以让以后更容易迁移,以防您的情况发生变化 - 您无需通过代码删除所有SET NAMES

答案 1 :(得分:0)

$query = "SET NAMES UTF8";
$db->setQuery($query);
$db->query();

$query = "select id, title from other_database.ibf_topics";
$db->setQuery($query);
$db->query();

答案 2 :(得分:0)

/ *   你可以在数据库连接后设置charset * /

标题('内容类型:text / html; charset = utf-8');

/ * 连接后 * /

mysql_query(" SET NAMES utf8");

/ * 要么 * /

mysql_query(" SET CHARACTER SET utf8");

/ * 要么 * /

mysql_query(" SET COLLATION_CONNECTION =' utf8_general_ci'");