2011-09-24 68 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