如何在magento核心资源中设置utf8字符集?

时间:2015-09-15 16:41:47

标签: php mysql magento utf-8 special-characters

我正在从API响应中进行批量产品导入。这个批量产品导入将使用核心资源连接的mysql查询处理大量数据更新。

因此,在这种情况下,系统将从Api响应中接收一些特殊字符,特殊字符应如下所示。

[Name] => GÄNGT M8X0.75 6H

我们需要将此值保存为GÄNGT M8X0.75 6H

由于批量更新的原因,我们使用直接更新查询来命中mysql数据库而不是使用本机magento适配器。

以上特殊字符在进行直接更新时不会使用utf8转换更新。但是如果我们使用magento产品导入适配器,它将转换并保存为mysql数据库中的值。

我尝试在magento核心资源集合中添加set character_set_results=utf8,但没有运气。

以下是我的尝试:

$resource = Mage::getSingleton('core/resource');
$writeConnection = $resource->getConnection('core_write');
$writeConnection->query("set character_set_results=utf8"); 
$writeConnection->query($mysqlUpdateQuery);
$writeConnection->closeConnection();

任何人都可以帮助我,出现什么问题或者我想添加/修改utf8值转换。

任何帮助很多赞赏!

2 个答案:

答案 0 :(得分:2)

Ä是utf8 Ä的Mojibake。

通常在

时发生Mojibake
  • 客户端中的字节在utf8(正常)中正确编码。
  • 您可能默认与SET NAMES latin1(或set_charset('latin1')或...)相关联。 (应该是utf8。)
  • xx表中的列已声明为CHARACTER SET latin1。 (或者它可能是从表/数据库继承的。)(应该是utf8。)
  • 表格中的列可能是CHARACTER SET utf8,也可能不是SELECT col, HEX(col) FROM ... WHERE ... ,但应该是这样。

由于这些似乎不同意你所说的,让我们进一步挖掘。请提供

GÄNGT M8X0.75 6H

47 C384 4E4754204D3858302E3735203648,如果正确存储在utf8中,则会有47 C383 E2809E 4E4754204D3858302E3735203648(我添加空格);

如果存储不正确(以一种方式),则十六进制将为C384

你看到其中任何一个吗?还是第三个十六进制?

有了这个答案,我们就可以着手制定纠正措施。

C383 E2809E已存储

这可能就是这样发生的。结果是“双重编码”,而不是“Mojibake”。

  • 客户端Älatin1的正确utf8编码。
  • 初始化错误地设置为$writeConnection->query("set character_set_results=utf8");。这需要改变。请注意,您有SET NAMES,它只处理输出侧,而不是输入侧。阅读$writeConnection->query("SET NAMES utf8");。将其更改为CHARSET utf8
  • 该列已正确声明UPDATE tbl SET name = CONVERT(BINARY( CONVERT(name USING latin1)) USING utf8);

修复数据:

   class myclass { /* whatever attributes, methodes */  };

    list<myclass *> lst (5); //5 pointers will be NULL this way

for (list<myclass *>::iterator it=lst.begin(); it != lst.end(); it++)  {
   myclass *obj= *it;
   delete obj;              //error
   it = lst.erase(it);
}

答案 1 :(得分:0)

在magento中设置utf8_general_ci Mysql数据库字符集,如下所示

创建数据库后,需要运行此sql查询:

ALTER DATABASE DB_NAME默认字符集utf8 COLLATE utf8_general_ci;

DB_NAME是您的数据库名称。