2010-11-16 14 views
10

Tôi đang sử dụng Zend_Db và cố gắng thay đổi charset utf8 để, đây là mã:Cách tốt nhất để thiết lập charset cho Zend_Db (hoặc ít nhất là tốt hơn so với những gì tôi hiện đang làm)

config.ini:

[development] 
db.host = "localhost" 
db.username = "root" 
db.password = "toor" 
db.dbname = "db_whoopdiedo" 
db.charset = "utf8" 

bootstrap.php:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 

    public function _initAutoload() 
    { 
     Zend_Registry::set(
      'config', 
      new Zend_Config_Ini(APPLICATION_PATH.'/configs/config.ini', 'development') 
     ); 

     Zend_Registry::set(
      'db', 
      Zend_Db::factory('Pdo_Mysql', Zend_Registry::get('config')->db) 
     ); 

     Zend_Registry::get('db')->setFetchMode(Zend_Db::FETCH_OBJ); 
     Zend_Registry::get('db')->query("SET NAMES 'utf8'"); 
     Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'"); 
    } 
} 

tôi nghĩ rằng nó sẽ là đủ để thêm charset trong cấu hình, nhưng ông chỉ applys nó nếu tôi đặt nó trực tiếp sử dụng:

Zend_Registry::get('db')->query("SET NAMES 'utf8'"); 
Zend_Registry::get('db')->query("SET CHARACTER SET 'utf8'"); 

Câu hỏi của tôi: có cách nào tốt hơn để đặt bộ ký tự, có thể cấu hình khôn ngoan không?

Trả lời

17

Trước hết tôi muốn thoát ra khỏi thiết lập cơ sở dữ liệu của bạn vào hàm init riêng của nó như sau:

/** 
* Initiate Zend Autoloader 
* @return Zend_Db_Adapter 
*/ 
protected function _initDatabase() 
{ 
    $resource = $this->getPluginResource('db'); 
    $db = $resource->getDbAdapter(); 
    Zend_Registry::set("db", $db); 
    return $db; 
} 

Ví dụ trên sử dụng các nguồn lực đó là xác định trước cấu hình cấu hình cho các tác vụ phổ biến nhất định trong Zend Framework. Đơn giản chỉ cần bằng cách sau đây trong tập tin cấu hình application.ini của tôi, chúng ta có thể giải quyết các tài nguyên 'db' trong Bootstrap trên:

resources.db.adapter = "pdo_sqlite" 
resources.db.params.host = "localhost" 
resources.db.params.username = "databaseuser" 
resources.db.params.password = "mysecretpassword" 
resources.db.params.dbname = APPLICATION_PATH "/data/db/ccymod.db" 
resources.db.isDefaultTableAdapter = true 

Ví dụ này là dành cho một db sql nhưng MySQL sẽ trông tương tự, nhưng với pdo_mysql và dbname sẽ không phải là đường dẫn tệp mà là một chuỗi.

tài liệu Thông tin thêm về các nguồn tài nguyên có thể được tìm thấy ở đây:

http://framework.zend.com/manual/en/zend.application.available-resources.html

Bây giờ sử dụng các nguồn tài nguyên cấu hình phần agin chúng ta có thể thêm vào đó những dòng sau để thiết lập các nhân vật cơ sở dữ liệu thiết lập như sau:

resources.db.params.charset = "utf8" 
resources.db.params.driver_options.1002 = "SET NAMES utf8;" 

Nếu bạn vẫn gặp sự cố, hãy xem bài đăng blog hướng dẫn zend framework của Rob Allen trên akrabat dot com và các nhận xét sẽ xuất hiện ở khoảng 45 trở đi về thiết lập UTF8 và mysql cho tài nguyên ZF S.

+0

thats những gì tôi gọi kỹ lưỡng: D Hoạt động như một sự quyến rũ, cảm ơn bạn! – Hannes

1

Taken từ application.ini của chúng tôi:

db.params.driver_options.3 = "SET NAMES 'utf8'" 
Các vấn đề liên quan