我想使用Doctrine連接到數據庫時,將字符集設置爲utf8。如果我連接使用這樣的常規PDO連接我能做到這一點罰款:如何在使用原則的連接時設置mysql字符集?
$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我無法刪除數據庫。事情是這樣的:
$manager->connection('mysql://user:[email protected]/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:[email protected]/mydb?charset=utf8', 'doctrine');
但通過主義代碼調試器一起去,我看到DSN的字符集的一部分被解析,但我不能看到它被用於任何地方...
那麼,我在這裏做錯了什麼?謝謝。建立連接出現問題後http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#pdo-mysql
使用SET NAMES設置字符集:
我覺得我得到的回答我自己的問題。閱讀後,我發現MySQL PDO忽略dsn中的字符集規範,因此,設置它的方式是通過「SET NAMES」查詢,這是我的第一個連接示例中使用的,使用PDO :: MYSQL_ATTR_INIT_COMMAND 。謝謝 – Muc 2011-04-20 20:44:01