2011-09-24 66 views
0

我剛剛創建的腳本導入一個給定的文件(CSV),以Opencart的。遠程服務器將數據傳輸爲iso-8859-1,而opencart默認使用utf8_bin合併。插入瑞典字符Opencart的表

我的問題是,該腳本,其中默認回聲報表顯示沒有任何問題或怪異字符所需的輸出,不會將數據不會弄亂特殊字符瑞典提交到數據庫中。

上午例子就是一句話:Värmepump 這絕對不是應該這樣的。

任何想法究竟會失敗呢?我已經嘗試添加SET NAMES的'utf8'查詢,但它沒有幫助。

+1

需要更多信息。你能顯示一些代碼嗎?代碼在哪一點上突破? –

+0

嘿,其實代碼根本不會中斷。所有產品都是導入的,但是用查詢的隨機回顯語句,一切看起來都很棒,並且在運行查詢之後,MySQL中的字符被破壞。 查詢導入描述和名稱: '$ sql_ins_prod_name =「insert into {$ tbl_prefix} product_description set'product_id' =」。$ tmp_prod_id。「,'language_id' =」。$ language_id。「,'name' ='「。trim($ prod_data [5])。」','description' ='「。 $ prod_data [6]。 「','meta_description' ='','meta_keyword' =''」;' – ChrJantz

+0

所以源數據是iso-8859-1?在將數據插入數據庫之前,您是否嘗試過通過['utf8_encode'](http://php.net/utf8_encode)傳遞字符串? – Viktor

回答

1

好吧,如果數據是utf-8編碼,我的猜測是有無論是在數據庫或數據庫連接的一些問題。這裏有一些針對你的調試技巧。

MySQL數據庫和表字符集/歸類(來自命令行)

mysql -u [youruser] [yourdatabase] -p 
mysql> SHOW CREATE DATABASE [yourdatabase]; 
mysql> SHOW CREATE TABLE [yourtable]; 

一切都應該UTF8。

MySQL數據庫連接(從PHP腳本)

$result = mysql_query("SHOW VARIABLES LIKE '%character%'"); 

while ($row = mysql_fetch_assoc($result)) 
{ 
    error_log(print_r($row, true)); 
} 

一切都應該在這裏UTF8爲好。

編輯:您的字符串實際上是在兩次編碼。運行一個簡單的

echo utf8_decode(utf8_decode('Värmepump'))."\n"; 

在ANSI編碼的PHP文件中輸出預期的「Värmepump」。確保您只對數據進行一次編碼。

+0

謝謝!那裏有幾個條目(連接部分)。你能否很快說我如何將它們全部改爲utf8? – ChrJantz

+0

連接建立後@TheReaper:'SET NAMES utf8'應該可以做到,但是你提到你已經嘗試過了?如果您可以更改MySQL配置文件(非共享環境)並且服務器上的其他應用程序不受影響,您可能需要更改配置文件(通常爲'my.cnf')中的設置。相關手冊條目[這裏](http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html)和[here](http://dev.mysql.com/doc/refman/ 5。5/EN /服務器系統variables.html)。 – Viktor

+0

嘿,好吧我嘗試了兩個。可悲的是,它仍然無法按預期工作。所有值現在都是utf8。我可能會嘗試使用curl檢索包含數據的文件,並希望這可以做到這一點。 – ChrJantz