我剛剛創建的腳本導入一個給定的文件(CSV),以Opencart的。遠程服務器將數據傳輸爲iso-8859-1,而opencart默認使用utf8_bin合併。插入瑞典字符Opencart的表
我的問題是,該腳本,其中默認回聲報表顯示沒有任何問題或怪異字符所需的輸出,不會將數據不會弄亂特殊字符瑞典提交到數據庫中。
上午例子就是一句話:Värmepump 這絕對不是應該這樣的。
任何想法究竟會失敗呢?我已經嘗試添加SET NAMES的'utf8'查詢,但它沒有幫助。
我剛剛創建的腳本導入一個給定的文件(CSV),以Opencart的。遠程服務器將數據傳輸爲iso-8859-1,而opencart默認使用utf8_bin合併。插入瑞典字符Opencart的表
我的問題是,該腳本,其中默認回聲報表顯示沒有任何問題或怪異字符所需的輸出,不會將數據不會弄亂特殊字符瑞典提交到數據庫中。
上午例子就是一句話:Värmepump 這絕對不是應該這樣的。
任何想法究竟會失敗呢?我已經嘗試添加SET NAMES的'utf8'查詢,但它沒有幫助。
好吧,如果數據是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」。確保您只對數據進行一次編碼。
謝謝!那裏有幾個條目(連接部分)。你能否很快說我如何將它們全部改爲utf8? – ChrJantz
連接建立後@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
嘿,好吧我嘗試了兩個。可悲的是,它仍然無法按預期工作。所有值現在都是utf8。我可能會嘗試使用curl檢索包含數據的文件,並希望這可以做到這一點。 – ChrJantz
需要更多信息。你能顯示一些代碼嗎?代碼在哪一點上突破? –
嘿,其實代碼根本不會中斷。所有產品都是導入的,但是用查詢的隨機回顯語句,一切看起來都很棒,並且在運行查詢之後,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
所以源數據是iso-8859-1?在將數據插入數據庫之前,您是否嘗試過通過['utf8_encode'](http://php.net/utf8_encode)傳遞字符串? – Viktor