2010-04-23 67 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'」);