为什么Doctrine2数组类型序列化失败了一些特殊字符?

时间:2012-10-01 10:00:50

标签: serialization encoding doctrine-orm issue-tracking

我在doctrine2发现了数组类型的问题。

在我的应用程序中,我有一些用户来自斯洛文尼亚。这些人有一些奇怪的字符,如“čćšž”。此值被序列化并存储到数据库后,会出现问题。

之后我得到以下的期望: 注意:unserialize()[function.unserialize]:/Applications/MAMP/htdocs/firegames.at/vendor/doctrine-dbal/lib/Doctrine/DBAL/Types/ArrayType.php第46行中的645字节偏移量456处的错误< / p>

所以我发现序列化刺痛中的以下内容触发了预期: s:7:“Urani?”

但应该是Uranić。我试图将字符串转换为utf8但它也失败了。字符不能被编码!

如果我更换它,这是有趣的吗?直接与ć它按预期工作。同样奇怪的是charž没有问题。这是唯一有效的。

所以任何人都知道如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您需要做的是告诉DBAL在连接到DB时执行“SET NAMES utf8”。这是通过将charset='utf8'参数传递给配置来完成的。您可能想要阅读documentation,您会发现这只能用于PDO MySQL和OCI(Oracle),但我假设您使用的是MySQL。

此外,您是否使用CHARACTER SET utf8 COLLATE utf8_slovenian_ci创建了表格单元格?