修正 joomla 資料庫中文亂碼 (phpmyadmin)

1.0.12中文版程式臭蟲回報

修正 joomla 資料庫中文亂碼 (phpmyadmin)

文章ycs » 2007年 5月 12日, 04:11

安裝 joomla 1.0.12 正式版後,從 phpmyadmin 來看都是中文亂碼,無法從 phpmyadmin 中修改 joomla 內容
Export 出來的中文 sql 資料也是中文亂碼

建議修改

includes/database.php
line 101-106

  $this->_table_prefix = $table_prefix;
  //@mysql_query("SET NAMES 'utf8'", $this->_resource);
  $this->_ticker = 0;
  $this->_log = array();
}



  $this->_table_prefix = $table_prefix;
  if ($this->isSupportUtf8()) {
      mysql_query("SET NAMES 'utf8'", $this->_resource);
  }

  $this->_ticker = 0;
  $this->_log = array();
}

/**
* @return bool check if mysql support utf8 or not
*/

function isSupportUtf8() { // from dotproject 2.1rc1 Chinese Mark Wu
  // check mysql version. Version lower than 4.1.1 doesn't support utf8
  if (mysql_get_server_info($this->_resource) < '4.1.1') return false;

  // check if utf8 support was compiled in
  $result = mysql_query("SHOW CHARACTER SET like 'utf8'", $this->_resource);
  if (mysql_num_rows($result) > 0) {
      return true;
  }
  return false;
}


-------------------------------------------

修改

installation/install2.php
line 67

$sql = "CREATE DATABASE `$DBname`";




if ($database->isSupportUtf8()) {
  $sql = "CREATE DATABASE `$DBname` CHARACTER SET utf8 COLLATE utf8_general_ci";
} else {
  $sql = "CREATE DATABASE `$DBname`";
}


這樣 "新安裝 joomla" 的人就不會有中文亂碼的問題,以上的程式主要是檢查 mysql 是否為 4.1.1 或是更新的版本,因為在 mysql 4.1.1 以後有支援 utf8,下面的方法主要是針對已經安裝過 joomla 的人,而且資料庫已經有不少資料的情況

===========================================================

如何轉換舊的 joomla 資料 latin1 成 utf8

註:如果你的 mysql 版本比 4.1.1 還要舊,以下的內容你就不需要看

(1) 修改 phpmyadmin

註:如果你使用虛擬主機,你需要自己上傳一個 phpmyadmin,然後設定
 (設定可以參考 http://www.chweng.idv.tw/serverguide/phpmyadmin.php

修改 phpmyadmin_安裝目錄\libraries\select_lang.lib.php (大約是在 line 350 -370 之間)

$mysql_charset_map = array(
'big5' => 'big5',
'cp-866' => 'cp866',
'euc-jp' => 'ujis',
'euc-kr' => 'euckr',
'gb2312' => 'gb2312',
'gbk' => 'gbk',

'iso-8859-1' => 'latin1',
'iso-8859-2' => 'latin2',
'iso-8859-7' => 'greek',
'iso-8859-8' => 'hebrew',
'iso-8859-8-i' => 'hebrew',
'iso-8859-9' => 'latin5',
'iso-8859-13' => 'latin7',
'iso-8859-15' => 'latin1',
'koi8-r' => 'koi8r',
'shift_jis' => 'sjis',
'tis-620' => 'tis620',
'utf-8' => 'utf8',
'windows-1250' => 'cp1250',
'windows-1251' => 'cp1251',
'windows-1252' => 'latin1',
'windows-1256' => 'cp1256',
'windows-1257' => 'cp1257',
);

成 

$mysql_charset_map = array(
'big5' => 'latin1',
'cp-866' => 'cp866',
'euc-jp' => 'ujis',
'euc-kr' => 'euckr',
'gb2312' => 'latin1',
'gbk' => 'latin1',

'iso-8859-1' => 'latin1',
'iso-8859-2' => 'latin2',
'iso-8859-7' => 'greek',
'iso-8859-8' => 'hebrew',
'iso-8859-8-i' => 'hebrew',
'iso-8859-9' => 'latin5',
'iso-8859-13' => 'latin7',
'iso-8859-15' => 'latin1',
'koi8-r' => 'koi8r',
'shift_jis' => 'sjis',
'tis-620' => 'tis620',
'utf-8' => 'latin1',
'windows-1250' => 'cp1250',
'windows-1251' => 'cp1251',
'windows-1252' => 'latin1',
'windows-1256' => 'cp1256',
'windows-1257' => 'cp1257',
);

註:如果你只希望在 phpmyadmin 中看到正常的中文,那下一步你就不需要做,因為下一步的方法會把整個資料改成 utf8



(2) 匯出整個資料庫的資料

用 phpmyadmin 匯出整個資料庫的資料 (如:你匯出成 joomla-bk.sql)

用 notepad++ 打開 joomla-bk.sql (你之前匯出的資料庫資料)
註:notepad++ 下載 (http://sourceforge.net/projects/notepad-plus/)

a. 使用 utf-8 編碼 (檔首無 BOM)

圖檔

按 utf-8 編碼 (檔首無 BOM)

圖檔

b. 取代 latin1 成 utf8

把所有的 DEFAULT CHARSET=latin1 換成 DEFAULT CHARSET=utf8 (按 ctrl+H --> 全部取代)

圖檔

c. 搜尋 core_acl_aro

按 ctrl+F 來搜尋 core_acl_aro,只有這個 Table 的 DEFAULT CHARSET 不能改為 utf8,所以要改回來 latin1

CREATE TABLE `jos_core_acl_aro` (
`aro_id` int(11) NOT NULL auto_increment,
`section_value` varchar(240) NOT NULL default '0',
`value` varchar(240) NOT NULL default '',
`order_value` int(11) NOT NULL default '0',
`name` varchar(255) NOT NULL default '',
`hidden` int(11) NOT NULL default '0',
PRIMARY KEY (`aro_id`),
UNIQUE KEY `section_value_value_aro` (`section_value`,`value`),
UNIQUE KEY `jos_gacl_section_value_value_aro` (`section_value`,`value`),
KEY `hidden_aro` (`hidden`),
KEY `jos_gacl_hidden_aro` (`hidden`)
) ENGINE=MyISAM AUTO_INCREMENT=107 DEFAULT CHARSET=latin1;

d. 將 joomla-bk.sql 存檔

e. 把 phpmyadmin 改回原來的設定

把 (1) phpmyadmin\libraries\select_lang.lib.php 的設定改回來
'big5' => 'big5',
'gb2312' => 'gb2312',
'gbk' => 'gbk',
'utf-8' => 'utf8',   

f. 建立一個測試資料庫

建立一個測試資料庫 testjoomla (連線校對使用 utf8_general_ci)

圖檔

g. 匯入 joomla-bk.sql

圖檔


h. 修改 joomla_安裝目錄\includes\database.php

  line 102
//@mysql_query("SET NAMES 'utf8'", $this->_resource);



@mysql_query("SET NAMES 'utf8'", $this->_resource);

i. 修改 joomla_安裝目錄\configuration.php 中的 $mosConfig_db, $mosConfig_user, $mosConfig_password

$mosConfig_db = 'testjoomla';
// 修改成 testjoomla

$mosConfig_user = 'testjoomla_databae_user';
// 你的 testjoomla 資料庫 user

$mosConfig_password = 'testjoomla_database_password';
// 你的 testjoomla 資料庫 user password

如果回到首頁,看到的都是你我熟悉的中文字,那就恭喜你沒做白工

再測試新增內容,然後從前後台及 phpmyadmin 去看,如果又是你我熟悉的中文字,那再次恭喜你解決了中文亂碼

最後測試從 phpmyadmin 修改中文字,如果修改的結果會在網站看到,那就恭喜你終於告別了 phpmyadmin 中文亂碼

=================================================

.... 如果還是中文亂碼一堆 ....

....

......


撱???撱???蝞∠?
  ??窗', 'o
   ??窗蝞∠?'
  ??窗??', '',
  擐?
  ?餃
  ??
  憭折??萎辣

撱???撱???蝞∠?
  ??窗', 'o
   ??窗蝞∠?'
  ??窗??', '',
  擐?
  ?餃
  ??
  憭折??萎辣

......

....




那恭喜你還是可以回復原來的 database,直接修改步驟 i 就好...
就當做什麼事情都沒有發生過 :)
最後由 ycs 於 2007年 5月 13日, 14:50 編輯,總共編輯了 1 次。
頭像
ycs
征將軍
 
文章: 72
註冊時間: 2007年 2月 1日, 21:56

回覆: 修正 joomla 資料庫中文亂碼 (phpmyadmin)

文章popking » 2007年 5月 15日, 21:37

多謝指教,解決大問題了 :D :D :D :D
頭像
popking
城門校尉
 
文章: 18
註冊時間: 2006年 6月 14日, 21:43

回覆: 修正 joomla 資料庫中文亂碼 (phpmyadmin)

文章Rex Liao » 2007年 8月 23日, 23:44

請問
如果我是使用Dreamhost~他的虛擬空間本身就附有Phpmyadmin~
我該怎麼作設定呢

另外如果資料庫亂碼 對我的joomla和資料庫會有什麼影響嗎???
Rex Liao
征將軍
 
文章: 59
註冊時間: 2007年 1月 2日, 08:09

回覆: 修正 joomla 資料庫中文亂碼 (phpmyadmin)

文章 » 2008年 3月 6日, 16:16

請問如果我是已經安裝好了那須如何更改,另外我按照你說的改阿重安裝1.0.12阿裝不起來錯誤訊息是說103行有問題而我看程式碼是專後的~
mysql_query("SET NAMES 'utf8'"、$this->_resource);
最後由 於 2008年 3月 6日, 19:22 編輯,總共編輯了 1 次。
城門校尉
 
文章: 11
註冊時間: 2008年 2月 21日, 11:18


回到 1.0.12中文版程式臭蟲回報

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客