2011-04-20 33 views
2

我想使用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設置字符集:

+0

我覺得我得到的回答我自己的問題。閱讀後,我發現MySQL PDO忽略dsn中的字符集規範,因此,設置它的方式是通過「SET NAMES」查詢,這是我的第一個連接示例中使用的,使用PDO :: MYSQL_ATTR_INIT_COMMAND 。謝謝 – Muc 2011-04-20 20:44:01

回答