gpt4 book ai didi

mysql - 如何使用 Doctrine 在连接时设置 mysql 字符集?

转载 作者:行者123 更新时间:2023-11-29 01:46:25 25 4
gpt4 key购买 nike

当我使用 Doctrine 连接到数据库时,我试图将字符集设置为 utf8。如果我使用像这样的常规 PDO 连接进行连接,我可以做得很好:

$manager = Doctrine_Manager::getInstance();

$manager->connection(
array(
'mysql:dbname=mydb;host=127.0.0.1;',
'user',
'password',
array( PDO::ATTR_PERSISTENT => true, PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8';" )
),
'doctrine' );

我遇到的问题是除非我使用类似 Doctrine 的 dsn,否则我无法删除数据库。像这样:

$manager->connection('mysql://user:password@127.0.0.1/mydb', 'doctrine' );

但是,如果我这样做,我无法从一开始(在连接时)就设置 PDO 属性,我必须使用:

$manager->getConnection( 'viajeros_doctrine' )->setCharset('utf8');
$manager->getConnection( 'viajeros_doctrine' )->setAttribute(Doctrine_Core::ATTR_PERSISTENT, true);

现在,我不确定从性能的角度来看这是否更糟(我的意思是,我不知道当你创建一个新对象时 PDO 用它的参数做了什么,但我想我正在发布每次连接到数据库时都是无用的查询 (SET NAMES='UTF8')。

根据我在 http://www.doctrine-project.org/documentation/manual/1_1/en/introduction-to-connections 上阅读的内容,我应该使用类似的东西:

$manager->connection('mysql://user:password@127.0.0.1/mydb?charset=utf8', 'doctrine' );

但是通过调试器检查 Doctrine 代码,我看到 dsn 的字符集部分被解析了,但我看不到它在任何地方被使用...

所以,我在这里做错了吗?谢谢。

最佳答案

您应该在完全关联的数组中传递带有连接的字符集:http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#pdo-mysql

在建立连接后使用 SET NAMES 设置字符集是错误的。它会导致 mysqli real_escape 不正确地转义字符。

它将被解析为一个关联数组:http://www.tig12.net/downloads/apidocs/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Manager.php.source.html#line221

关于mysql - 如何使用 Doctrine 在连接时设置 mysql 字符集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5734828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com