[英]How can I set mysql charset at connection time using doctrine?
当我使用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的charset部分被解析了,但是我看不到它在任何地方都被使用了...
那么,我在这里做错了吗? 谢谢。
您应该在完整的assoc数组中传递带有连接的字符集: 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.