2012-10-31 51 views
12

我的數據庫(MySql)有一個utf8_general排序規則。我正在從數據庫訪問數據並顯示一個網頁(用Perl開發),它顯示具有不同字符的瑞典字符(ä,å,ö)。我檢查了Mysql數據庫,在那裏我可以看到ä,å,ö字符的數據。看來,訪問數據時存在編碼問題。在連接到數據庫時,使用下面的代碼utf8在Perl和MySql中引用

my($dbh) = DBI->connect($config{'dbDriver'},$config{'dbUser'},$config{'dbPass'}) or die "Kunde inte ansluta till $config{'dataSource'}: " . $DBI::errstr; 
$dbh->{'mysql_enable_utf8'} = 1; 
$dbh->do('set names utf8'); 

任何幫助被認爲是!

謝謝。

+0

「訪問該數據時存在一些問題」不是該問題的充分說明。 – ikegami

+0

我的意思是,在訪問數據時存在一些編碼問題。我也更新了我的問題。 – dotnetrocks

+0

它究竟如何顯示角色?你的網頁是什麼編碼? –

回答

6

如果每個A/A/O由兩個字節輸出被代表,那麼它也有可能是你可能是雙重編碼那些角色。 (鑑於這個問題已經顯示你在做$dbh->{'mysql_enable_utf8'} = 1;,我懷疑這是最有可能的情況。)另一種可能性,鑑於你在網頁上顯示這個信息,該頁面可能沒有指定該字符集是UTF -8在其<head>和瀏覽器可能會錯誤地猜測它使用的字符編碼。

仔細看看您的web應用程序框架,模板系統等,以確保值從數據庫中檢索到它們到達用戶的瀏覽器之間時只進行一次編碼。許多框架/模板引擎(如我通常使用的Dancer和TT的組合)會自動處理輸出編碼,這意味着如果數據在輸出之前進行了明確編碼,則數據將被雙重編碼。

+1

我編碼了兩次。我刪除它,現在工作!非常感謝 !! :) – dotnetrocks

0

您需要在連接中將字符集設置爲utf8!

charset = utf8 
6

您需要設置mysql_enable_utf8上連接:

my($dbh) = DBI->connect(
    'dbi:mysql:test', 
    'user', 
    'password', 
    { 
     mysql_enable_utf8 => 1, 
    }  
); 
+0

嗨,謝謝。我試過mysql_enable_utf8 => 1,但問題沒有解決。 – dotnetrocks

+0

@dotnetrocks:它解決了你在你的問題中陳述的問題。如果你的網頁編碼有問題,你應該注意IO和正確的標題 –