JOOMLA中文安装时 数据库发生错误解块办法
解法:
如果您符合下列條件就會在安裝Joomla的時候卡在install2.php並出現下列錯誤:#1071 - Specified key was too long; max key length is 1000 bytes
- 新安裝Joomla, Mambo無論任何版本任何語系,包括目前站上的1.0.7中文版
- 使用MySQL4.1以上,預計安裝Joomla的資料庫預設字元集是utf8
解法:
- 打開installation/sql/[欲安裝的語系]/joomla.sql。
- 尋找下面這行
UNIQUE KEY `section_value_value_aro` (`section_value`,`value`)
- 在這兩行前面加#號把它們無效掉:
UNIQUE KEY `section_value_value_aro` (`section_value`,`value`),
UNIQUE KEY `#__gacl_section_value_value_aro` (`section_value`,`value`),
- 在這個指令的下面(也就是# Table structure for table `#__core_acl_aro_groups`的上面新增下面四行:
ALTER TABLE `#__core_acl_aro` CHANGE `section_value` `section_value` VARCHAR( 240 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL default '0';
ALTER TABLE `#__core_acl_aro` CHANGE `value` `value` VARCHAR( 240 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL default '';
ALTER TABLE `#__core_acl_aro` ADD UNIQUE `section_value_value_aro` ( `section_value` , `value` );
ALTER TABLE `#__core_acl_aro` ADD UNIQUE `#__gacl_section_value_value_aro` (`section_value`,`value`);
- 存檔。然後打開includes/database.php。
- 找這行//@mysql_query("SET NAMES 'utf8'", $this->_resource);
- 在它下面增加兩行:
@mysql_query("SET NAMES 'utf8'", $this->_resource);
@mysql_query("SET CHARACTER SET UTF8", $this->_resource);
- 結束。記得日後升級如果有蓋到includes/database.php要做同樣的事情。
原因
1. 用utf8資料庫在建立資料表的時候會遇到MySQL Bug #4541。此解法讓Joomla安裝程式把那兩個欄位改回latin1在加它要的Unique Key。
2. MySQL4.1之後開始關心php程式送進去的資料是什麼編碼,所以我們要在database.php裡面傳個指令告訴它。
警告
1.網路上其他解法說建個latin1的資料庫給Joomla使用就好了,還是可以順利使用中文。沒錯,但是資料實際上在資料庫裡面是亂碼(用phpMyAdmin進去看就知道),您會無法備份您的網站。將錯就錯,請勿使用本解法裡面的改法改資料庫與database.php,網站會爆炸。
2. 記得日後升級如果有蓋到includes/database.php要做同樣的事情。
其他已知問題
mysqli沒有辦法SET NAMES `utf8`,請勿使用database.mysqli.php就算您用MySQL5。還有php的mysql連線預設編碼一定是latin1,要改掉這個一定要重新編譯libmysql。
其他中的其他
外國人是二等公民啊。WordPress、Tavi、Joomla通通都有同樣的問題;另外上面這個解法花了我4小時才試出來。
如果您覺得以上解法有用,請回個文讓大家容易找到這篇文章,謝謝^^。