2011-04-20 7 views
2

Doctrine을 사용하여 데이터베이스에 연결할 때 charset을 utf8로 설정하려고합니다. 나는이 같은 일반 PDO 연결을 사용하여 연결하면 괜찮을 그것을 할 수 있습니다 :이와 가지고doctrine을 사용하여 연결시 mysql charset을 어떻게 설정할 수 있습니까?

$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->getConnection('viajeros_doctrine')->setCharset('utf8'); 
$manager->getConnection('viajeros_doctrine')->setAttribute(Doctrine_Core::ATTR_PERSISTENT, true); 

을 지금 :

$manager->connection('mysql://user:[email protected]/mydb', 'doctrine'); 

하지만, 나는 이런 식으로 할 경우 내가 PDO는 (연결시) 처음부터 속성을 설정할 수 없습니다, 나는 사용해야합니다 , 이것이 성능 관점에서 더 나쁘지는 모르겠다. (나는 새로운 객체를 만들 때 PDO가 매개 변수를 사용하여 수행하는 작업을 정확히 알지 못한다. 그러나 매번 쓸모없는 쿼리를 발행한다고 생각한다. 데이터베이스 (SET NAMES='UTF8')에 연결됩니다.

내가 읽은 바로는...

$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 이름을 사용하여 문자 집합을 설정 :

+0

은 내가 내 자신의 질문에 대한 답을 찾은 것 같아. 주위를 읽은 후에, 나는 MySQL PDO가 그것의 dsn에있는 charset 명세를 무시한다는 것을 발견했다. 그래서 그것을 설정하는 방법은 PDO :: MYSQL_ATTR_INIT_COMMAND를 사용하여 나의 첫 번째 연결 예에서 있었던 SET NAMES 쿼리를 통한 것이다 . 감사 – Muc

답변

관련 문제