Doctrine:特殊字符不保存到数据库字符串字段中

时间:2013-01-25 23:30:55

标签: mysql symfony doctrine diacritics

我试图用doctrine(在symfony2中)保存到字符串字段(mysql数据库)中:

$blogpost->setTitle = "Test !§$%&/()=? äöü ÄÖÜ :D";

$em = $this->getDoctrine()->getManager();
$em->persist($blogpost);
$em->flush();

但它节省了我:“测试!” (其余的都没有了)

实体是:

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

mysql数据库是utf8_general_ci。

(当我用phpmyadmin手动添加实体时,它可以正常工作。)

我需要有德国变形金刚。希望你能帮助我。

2 个答案:

答案 0 :(得分:3)

您必须为实体管理连接字符串设置编码:

doctrine:
    dbal:
        driver: %database_driver%
        host: %database_host%
        port: %database_port%
        dbname: %database_name%
        user: %database_user%
        password: %database_password%
        charset: UTF8

这样,您可以在数据库的所有列中包含UTF8字符。

答案 1 :(得分:2)

在此文件vendor/doctrine/dbal/lib/Doctrine/DBAL/Platforms/MySqlPlatform.php

他们有

if ( ! isset($options['collate'])) {
  $options['collate'] = 'utf8_unicode_ci';
}

尝试将其更改为utf8_general_ci

另请看这里

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/faq.html#how-do-i-set-the-charset-and-collation-for-mysql-tables