Utf8,瑞典字符,Doctrine,Mysql和Json序列化

时间:2015-10-18 11:12:48

标签: php mysql json utf-8 doctrine-orm

我有一个应用程序,我正在尝试Doctrine2。我有一个配置类型为InnoDB和collat​​ion utf8_unicode_ci的数据库。然后我有一个包含两列的简单表:id(整数)和name(字符串)。

我使用phpmyadmin在表格中输入一行,然后使用以下代码从数据库中读取信息:

$serializer = JMS\Serializer\SerializerBuilder::create()->build();
$county = $entityManager->find('County', 1);
$jsonContent = $serializer->serialize($county, 'json');

我使用的序列化程序来自http://jmsyst.com/libs/serializer

我的县实体档案如下:

    <?php
use Doctrine\ORM\Mapping as ORM;

// src/County.php
/** @ORM\Entity **/
class County
{
    /** @ORM\Id @ORM\Column(type="integer") **/
    protected $id;

    /** @ORM\Column(type="string") * */
    protected $name;


    public function getId()
    {
        return $this->id;
    }

    public function setId($id)
    {
        $this->id = $id;
    }

    public function getName()
    {
        return $this->name;
    }

    public function setName($name)
    {
        $this->name = $name;
    }
}

当我尝试在没有瑞典语字符的行上运行它时,一切正常,但如果我通过Phpmyadmin输入瑞典字符'ä'并尝试读取该行,则会出现以下异常:

  

致命错误:未捕获的异常'RuntimeException',消息'你的   数据无法编码,因为它包含无效的UTF8   字符“。在   C:\ WAMP \ WWW \原则\供应商\ JMS \串行的\ src \ JMS \串行\ JsonSerializationVisitor.php   在第36行

有关我做错的任何提示?我认为这应该有用。

1 个答案:

答案 0 :(得分:0)

我明白了。我将charset添加到连接对象然后它可以工作。

$conn = array(
'driver' => 'pdo_mysql',
'dbname' => 'doctrine',
'user' => 'doctrine',
'password' => 'doctrine',
'host' => 'localhost',
'charset' => 'UTF8'
);