Я пытаюсь установить кодировку в utf8 при подключении к базе данных с помощью Doctrine. Я могу сделать это нормально, если я подключаюсь с помощью обычного соединения 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' );
Проблема, с которой я столкнулся, заключается в том, что я не могу удалить базу данных, если не использую dsn, подобный Doctrine. Примерно так:
$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 / Документация / Руководство / 1_1 / ru / Введение в соединения , я должен использовать что-то вроде:
$manager->connection('mysql://user:password@127.0.0.1/mydb?charset=utf8', 'doctrine' );
Но, просматривая код Doctrine с помощью отладчика, я вижу, что часть кодировки dsn анализируется, но я не вижу, чтобы она использовалась где-либо ...
Так, я что-то здесь не так делаю? Спасибо.