2010-04-23 68 views
2

我有一个关于从内部mysql查询转换字符集的问题。在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

回答

2

,你可以打开2个数据库连接,1至Joomla和一个平局。你会使用更多的资源,但它会让你的代码更易于阅读,并且你可以在数据库设置中完成所有配置(字符集等)。这也将使以后迁移更容易,以防万一您的情况发生变化 - 您将不需要通过代码去除所有的SET NAMES

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

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

对不起?我没有明白。 你能解释更多吗?这和我的代码有什么区别? – Yousf 2010-04-23 23:25:29

+0

@Yosif它缩短了2倍 – 2010-04-23 23:40:13

+0

我得到了你的答案,但这不起作用。我应该在从“other_database.ibf_topics”中选择之前将名称更改为latin1;如果连接使用UTF8,则此表包含已损坏的非英文字母。 – Yousf 2010-04-24 09:05:19

0

/* 可以数据库连接后设置的字符集 */

头( '内容 - 类型:文本/ HTML;字符集= UTF-8');

/* 连接后 */

的mysql_query( “SET NAMES UTF8”);

/* 或 */

的mysql_query( “SET CHARACTER SET UTF8”);

/* 或 */

的mysql_query( “SET collat​​ion_connection是= 'utf8_general_ci'”);