程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> 教你如何解決453h安裝在mysql 4.1 以上的UTF8數據庫中造成

教你如何解決453h安裝在mysql 4.1 以上的UTF8數據庫中造成

編輯:關於MYSQL數據庫

這幾天在嘗試安裝mambo 4.53h版, 由於我的數據庫是mysq4.1以上版本,並且設定的字符集是UTF8 。在嘗試安裝了幾次後發現以下幾種情況:

1. 將數據庫設置為 latin1 ,  不修改任何文件,在安裝時無論選擇gb2312 還是utf8,都可以完成安裝,並且網頁顯示正常,但是通過PHPmyadmin看數據表時發現,裡面所有中文全部為亂碼,也就是說,通過latin1字符集保存,可以正常顯示中文網頁,但是實際上在數據庫中中文是亂碼。 而且不能通過PHPmyadmin備份(備份出來的文件,無論改成什麼編碼,裡面中文均為亂碼)。所以這不是王道,我沒有做選擇考慮。

2. 將數據庫字符集設置成utf8, 不修改任何文件,在安裝時無論選擇gb2312還是utf8,都出現 1071  specifIEd  key  too  long  max  length  1000  bytes  的錯誤。並且只要是數據庫字符集設置成utf8,(utf8是一個 character set  作為 3 bytes存儲,latin1 是作為1 bytes存儲),無論是按照論壇中的一些意見,修改 installation/sql/mambo.sql 還是別的文件, 都會出現key 超過1000bytes的錯誤,安裝不能繼續。

我本意是要安裝manbo的中文utf8版本,以方便和別的程序整合。所以在查詢了google,論壇和其他一些資料後,經過嘗試,終於以我的想法,以選擇 manbo的utf8 字符集 在MySQL4.1以上,並且字符集也是utf8 的數據庫中安裝成功。 網頁顯示中文正常,無亂碼,並且用PHPmyadmin查詢數據庫表時,所有中文也都顯示正常,並且以utf8保存。以下是我的解決方法,僅供參考:

 


首先設置數據庫字符集為utf8,


CODE:[Copy to clipboard]ALTER DATABASE  DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
或者通過PHPmyadmin裡面直接改也一樣。


修改 installation/sql/mambo.sql 文件:

查找將所有的


CODE:[Copy to clipboard]TYPE=MyISAM;
替換成


CODE:[Copy to clipboard]TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
查找


CODE:[Copy to clipboard]UNIQUE KEY `section_value_value_aro` (`section_value`,`value`)


CODE:[Copy to clipboard]UNIQUE KEY `#__gacl_section_value_value_aro` (`section_value`,`value`),
並將這2行代碼用 # 注釋掉,或者刪除,whatever~~

 

在這一段代碼下面,也就是


CODE:[Copy to clipboard]# Table structure for table `#__core_acl_aro_groups`
上面,按順序增加以下4行代碼:


CODE:[Copy to clipboard]ALTER TABLE `#__core_acl_aro` CHANGE `section_value` `section_value` VARCHAR( 240 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL default '0';

 

CODE:[Copy to clipboard]ALTER TABLE `#__core_acl_aro` CHANGE `value` `value` VARCHAR( 240 ) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL default '';

 

CODE:[Copy to clipboard]ALTER TABLE `#__core_acl_aro` ADD UNIQUE `section_value_value_aro` ( `section_value` , `value` );

 

CODE:[Copy to clipboard]ALTER TABLE `#__core_acl_aro` ADD UNIQUE `#__gacl_section_value_value_aro` (`section_value`,`value`);
-----------------------------

 

修改 includes/database.PHP 文件:
查找


CODE:[Copy to clipboard]$this->_table_prefix = $table_prefix;
在該行代碼下面添加以下三行代碼:


CODE:[Copy to clipboard]MySQL_query("SET NAMES 'utf8'", $this->_resource);

 

CODE:[Copy to clipboard]MySQL_query("SET CHARACTER SET utf8", $this->_resource);

 

CODE:[Copy to clipboard]MySQL_query("SET COLLATION_CONNECTION='utf8_general_ci'", $this->_resource);
修改後保存。


安裝的時候,選擇UTF8作為編碼格式安裝。

 

如此修改後能夠正常安裝,並且在數據庫中的中文顯示和保存都正常,如果需要整合discuz或者其他程序的時候,也能夠選擇UTF8版本,並且整合後不會出現在注冊時使用中文用戶名,但是注冊後顯示為亂碼的現象。

注意事項
經本方法修改後,請在升級manbo的時候,對 includes/database.PHP 做相應的修改,否則會出錯。

以上修改方法是我參考了論壇中的幾位達人以及通過google搜索查到的一些英文資料,還有TW manbo的一些資料後,經過嘗試完成修改並經測試沒有問題的。希望對碰到同樣問題的朋友有些用處!覺得有用的朋友頂一下,要對得起我寫的那麼多東西啊。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved