CodeIgniter 設定 MySQL 編碼
※ CodeIgniter 1.6 已釋出,不需再做這篇的修正了哦!
先前有提到過 CodeIgniter 這個 PHP Framework,也用它做了幾個 case,當然開發速度不能說快上多少,但確實讓程式碼變得整齊優雅許多。
使用 CI 目前遇到第一個問題是存取 MySQL 資料的問題,在 MySQL 4.1 以後採用了多層式編碼設定,簡單說就是不管是資料庫、資料表、欄位或是 Client 連線階段,都可以分別設定編碼,所以即使 server 都改成了 utf8,PHP 到 MySQL Server 的這個 connection 卻還是預設的(latin1),許多亂碼就是這樣造成的,應該已經有不少人知道解決方法,就是先送出一個改變編碼的查詢:SET NAMES 'charset'。
然而目前 CodeIgniter 並沒有這樣的設計,所以只好自行改 code 囉!
Step1:修改 system/application/config/database.php
增加一項:$db['default']['charset'] = "utf8";
Step2:修改 system/database/DB_driver.php
在 32 行之後的宣告增加:var $charset = '';
接著 96 行的陣列增加:'charset' => '',
Step3:修改 system/database/drivers/mysql/mysql_driver.php
74 行 return 前加入:
if (!empty($this->charset))
{
@mysql_query("SET NAMES $this->charset");
}
這樣就 ok 了,如果使用 mysqli 請如法炮製。另外如果主機環境符合,可使用 PHP 內建函式來設定:
// PHP >= 5.2.3,MySQL >= 5.0.7 for mysql @mysql_set_charset($this->charset, $this->conn_id); // PHP >= 5.0.5,MySQL >= 5.0.6 for mysqli @mysqli_set_charset($this->conn_id, $this->charset);
近期迴響