【问题标题】:UTF-8 Zend Framework and Doctrine 2UTF-8 Zend 框架和学说 2
【发布时间】:2011-10-16 23:00:40
【问题描述】:

使用 Doctrine 从数据库中查询 UTF-8 字符时,我无法正确显示它们。我已经尝试了我在互联网上可以找到的所有内容(例如:setCharset 似乎是最好的选择)。如果我直接从 PHP 打印 UTF-8 字符,它们会正确显示,所以输出到浏览器不是问题。这是我的配置:

application.ini

doctrine.conn.host = 'localhost'
doctrine.conn.user = 'someuser'
doctrine.conn.pass = 'somepass'
doctrine.conn.driver = 'pdo_mysql'
doctrine.conn.dbname = 'zoo'
doctrine.path.models = APPLICATION_PATH "/models"

教义的引导方法

    $classLoader = new \Doctrine\Common\ClassLoader(
        'Doctrine',
        APPLICATION_PATH . '/../library/'
    );
    $classLoader->register();

    $config = new \Doctrine\ORM\Configuration();

    $cache = new \Doctrine\Common\Cache\ArrayCache();
    $config->setMetadataCacheImpl( $cache );
    $config->setQueryCacheImpl( $cache );

    $driver = $config->newDefaultAnnotationDriver(
        APPLICATION_PATH . '/models'
    );

    $config->setMetadataDriverImpl( $driver );

    $config->setProxyDir( APPLICATION_PATH . '/models/Proxies' );
    $config->setAutoGenerateProxyClasses( true );
    $config->setProxyNamespace( 'App\Proxies' );

    $connectionSettings = $this->getOption( 'doctrine' );
    $conn = array(
        'driver' => $connectionSettings['conn']['driver'],
        'user' => $connectionSettings['conn']['user'],
        'password' => $connectionSettings['conn']['pass'],
        'dbname' => $connectionSettings['conn']['dbname'],
        'host' => $connectionSettings['conn']['host'],
    );

    $entityManager = \Doctrine\ORM\EntityManager::create( $conn, $config );
    $entityManager->getConnection()->setCharset('utf8');

    $registry = Zend_Registry::getInstance();
    $registry->entityManager = $entityManager;

    return $entityManager;

非常感谢任何帮助。

谢谢。

【问题讨论】:

  • 您的数据库表/列是否使用 unicode 字符集/排序规则?

标签: php mysql zend-framework utf-8 doctrine-orm


【解决方案1】:

doctrine.conn.driverOptions.1002 = "SET NAMES 'UTF8'" 呢?也许有帮助。

哦,我看到了,您正在手动引导它。您还必须在连接数组中添加行。

也许你会看看Bisna-library (Tutorial how to use it),它可以帮助你将教义2 集成到ZF 中。

【讨论】:

  • 这似乎不起作用。我没有使用 Bisna 进行集成。
【解决方案2】:

大约 6 个月前我遇到了同样的问题,我通过在

处编写以下行解决了这个问题

应用程序.ini

resources.db.params.charset = "utf8"

可以帮助你...

【讨论】:

  • 我一定做错了什么,因为显然没有任何效果。
【解决方案3】:

我也为此苦苦挣扎了很长时间,但找到了适合我的情况的解决方案。您必须将 EventSubscriber 添加到您的 EntityManager。

$entityManager = \Doctrine\ORM\EntityManager::create( $conn, $config );

$entityManager->getEventManager()
              ->addEventSubscriber(
                  new \Doctrine\DBAL\Event\Listeners\MysqlSessionInit('utf8', 'utf8_unicode_ci')
                );

希望这会对你有所帮助。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 2011-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多