Mambo 中國(guó)社區(qū) - Mambo使用交流 - ◆教你如何解決453h安裝在mysql 4.1 以上的UTF8數(shù)據(jù)庫(kù)中造成的亂碼和安裝失敗問題◆ - powered by Discuz!
◆教你如何解決453h安裝在mysql 4.1 以上的UTF8數(shù)據(jù)庫(kù)中造成的亂碼和安裝失敗問題◆
這幾天在嘗試安裝mambo 4.53h版, 由于我的數(shù)據(jù)庫(kù)是mysq4.1以上版本,并且設(shè)定的字符集是UTF8 。在嘗試安裝了幾次后發(fā)現(xiàn)以下幾種情況:
1. 將數(shù)據(jù)庫(kù)設(shè)置為 latin1 , 不修改任何文件,在安裝時(shí)無論選擇gb2312 還是utf8,都可以完成安裝,并且網(wǎng)頁(yè)顯示正常,但是通過phpmyadmin看數(shù)據(jù)表時(shí)發(fā)現(xiàn),里面所有中文全部為亂碼,也就是說,通過latin1字符集保存,可以正常顯示中文網(wǎng)頁(yè),但是實(shí)際上在數(shù)據(jù)庫(kù)中中文是亂碼。 而且不能通過phpmyadmin備份(備份出來的文件,無論改成什么編碼,里面中文均為亂碼)。所以這不是王道,我沒有做選擇考慮。
2. 將數(shù)據(jù)庫(kù)字符集設(shè)置成utf8, 不修改任何文件,在安裝時(shí)無論選擇gb2312還是utf8,都出現(xiàn) 1071 specified key too long max length 1000 bytes 的錯(cuò)誤。并且只要是數(shù)據(jù)庫(kù)字符集設(shè)置成utf8,(utf8是一個(gè) character set 作為 3 bytes存儲(chǔ),latin1 是作為1 bytes存儲(chǔ)),無論是按照論壇中的一些意見,修改 installation/sql/mambo.sql 還是別的文件, 都會(huì)出現(xiàn)key 超過1000bytes的錯(cuò)誤,安裝不能繼續(xù)。
我本意是要安裝manbo的中文utf8版本,以方便和別的程序整合。所以在查詢了google,論壇和其他一些資料后,經(jīng)過嘗試,終于以我的想法,以選擇 manbo的utf8 字符集 在mysql4.1以上,并且字符集也是utf8 的數(shù)據(jù)庫(kù)中安裝成功。 網(wǎng)頁(yè)顯示中文正常,無亂碼,并且用phpmyadmin查詢數(shù)據(jù)庫(kù)表時(shí),所有中文也都顯示正常,并且以u(píng)tf8保存。以下是我的解決方法,僅供參考:
- 首先設(shè)置數(shù)據(jù)庫(kù)字符集為utf8,
ALTER DATABASE DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
或者通過phpmyadmin里面直接改也一樣。
- 修改 installation/sql/mambo.sql 文件:
查找將所有的
TYPE=MyISAM;
替換成
TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
查找
UNIQUE KEY `section_value_value_aro` (`section_value`,`value`)
和
UNIQUE KEY `#__gacl_section_value_value_aro` (`section_value`,`value`),
并將這2行代碼用 # 注釋掉,或者刪除,whatever~~
在這一段代碼下面,也就是
# Table structure for table `#__core_acl_aro_groups`
上面,按順序增加以下4行代碼:
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 文件:
查找
$this->_table_prefix = $table_prefix;
在該行代碼下面添加以下三行代碼:
mysql_query("SET NAMES ‘utf8‘", $this->_resource);
mysql_query("SET CHARACTER SET utf8", $this->_resource);
mysql_query("SET COLLATION_CONNECTION=‘utf8_general_ci‘", $this->_resource);
修改后保存。
- 安裝的時(shí)候,選擇UTF8作為編碼格式安裝。
如此修改后能夠正常安裝,并且在數(shù)據(jù)庫(kù)中的中文顯示和保存都正常,如果需要整合discuz或者其他程序的時(shí)候,也能夠選擇UTF8版本,并且整合后不會(huì)出現(xiàn)在注冊(cè)時(shí)使用中文用戶名,但是注冊(cè)后顯示為亂碼的現(xiàn)象。
注意事項(xiàng)
經(jīng)本方法修改后,請(qǐng)?jiān)谏?jí)manbo的時(shí)候,對(duì) includes/database.php 做相應(yīng)的修改,否則會(huì)出錯(cuò)。
上面的解決方案,其實(shí)就是做了個(gè)妥協(xié),將會(huì)超過1000bytes,并且不會(huì)影響中文存儲(chǔ)和顯示的數(shù)據(jù)表 mos_core_acl_aro 表中的 section_value字段和 value 字段以 latin1 處理,其他以u(píng)tf8處理而已。這樣就能做到順利安裝,而且mysql不會(huì)影響中文的顯示和存儲(chǔ)。
我的服務(wù)器環(huán)境是:apache_2.0.55-win32
php4.3.10
mysql5.0.15
ZendOptimizer-2.6.0-Windows
MamboV4[1].5.3h_Global
操作系統(tǒng):winxp sp2
完全按照摟主的方式進(jìn)行更改,安裝過程一切順利,但是當(dāng)我在管理平臺(tái)進(jìn)行如下操作的時(shí)候出現(xiàn)如下錯(cuò)誤提示:
操作:[內(nèi)容]-〉[所有內(nèi)容條目]
錯(cuò)誤:DB function failed with error number 1054
Unknown column ‘c.access‘ in ‘on clause‘ SQL=SELECT c.*, g.name AS groupname, cc.name, u.name AS editor, f.content_id AS frontpage, s.title AS section_name, v.name AS author FROM mos_content AS c, mos_categories AS cc, mos_sections AS s LEFT JOIN mos_groups AS g ON g.id = c.access LEFT JOIN mos_users AS u ON u.id = c.checked_out LEFT JOIN mos_users AS v ON v.id = c.created_by LEFT JOIN mos_content_frontpage AS f ON f.content_id = c.id WHERE c.state >= 0 AND c.catid=cc.id AND cc.section=s.id AND s.scope=‘content‘ ORDER BY s.title, c.catid, cc.ordering, cc.title, c.ordering LIMIT 0,10
不知道摟主或其他人有沒有遇到過這種情況?
解決方法:
在這個(gè)文件中
administrator\components\com_content\admin.content .php
找到
. "\n FROM #__content AS c, #__categories AS cc, #__sections AS s"
替換為
. "\n FROM #__categories AS cc, #__sections AS s, #__content AS c"
共有2處要替換
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)
點(diǎn)擊舉報(bào)。