【发布时间】:2011-12-13 06:22:14
【问题描述】:
我不确定这是什么时候发生的。
我有一个新的直销联属网络营销网站,并从批发商那里收到一份导出的产品目录副本。我将其格式化并导入 Prestashop 1.4.4。
网站的前端在产品文本中包含奇怪字符的组合:Ã、Ã、¢、â‚ 等。它们代替常见的字符(如 、- : 等)出现。 p>
这些字符出现在大约 40% 的数据库表中,而不仅仅是像 ps_product_lang 这样的产品特定表。
Another website thread 说当数据库连接字符串使用不正确的字符编码类型时也会出现同样的问题。
在 /config/setting.inc 中,没有提到字符编码字符串,只是 MySQL 引擎,它设置为 InnoDB,与我在 PHPMyAdmin 中看到的匹配。
我导出了 ps_product_lang,将这些字符的所有实例替换为正确的字符,将 CSV 文件保存为 UTF-8 格式,然后使用 PHPMyAdmin 重新导入它们,指定 UTF-8 作为语言。
但是,在 PHPMyAdmin 中进行新搜索后,我现在在 ps_product_lang 中的这些坏字符的实例数量大约是我开始时的 10 倍。
如果问题就像在数据库连接字符串中指定正确的语言属性一样简单,我在哪里/如何设置它,以及如何设置?
顺便说一句,我尝试在this thread中提到的PHPMyAdmin中运行此命令,但问题仍然存在:
SET NAMES utf8
更新:PHPMyAdmin 说:
MySQL 字符集:UTF-8 Unicode (utf8)
这是我在上次导入文件中使用的相同字符集,导致更多字符损坏。在导入过程中将 UTF-8 指定为导入文件的字符集。
更新2
这是一个示例:
人们真正生活在无拘无束的生活中。 ‚ï† 在线购买和租借电影、下载软件,以及 在网络上共享和存储文件。
UPDATE3
我在 PHPMyAdmin 中运行了一条 SQL 命令来显示字符集:
- character_set_client utf8
- character_set_connection utf8
- character_set_database latin1
- character_set_filesystem 二进制文件
- character_set_results utf8
- character_set_server latin1
- character_set_system utf8
所以,也许我的数据库需要转换(或删除并重新创建)为 UTF-8。如果 MySQL 服务器是 latin1,这会造成问题吗?
MySQL 是否可以将服务内容转换为 UTF8 但将其存储为 latin1?我不认为它可以,因为 UTF8 是 latin1 的超集。我的虚拟主机支持在 48 小时内没有回复。对他们来说可能太难了。
【问题讨论】:
-
@AurelioDeRosa 上面添加的示例。
-
我对 prestashop 了解不多,但似乎它没有很好的 char 编码。无论如何,我看到其他人也有同样的问题:prestashop.com/forums/topic/…
-
这不只是一个FE问题吗? phpMyAdmin 设置为以错误的编码显示内容,而客户端未设置为使用 UTF-8?需要在元标记中。
-
@MarianP 数据库和服务器是 latin1 而 PHPMyAdmin 和 CSV 是 UTF8。 (见上面的更新3)
-
您无需重置所有数据库即可尝试。只需从 CSV 中获取“脏”行,将 utf-8 转换为 latin1 并将该行插入数据库。如果换行符正确,则问题已解决。
标签: database character-encoding prestashop