首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Mambo 4.5.3h 在 MySQL 4.1+ UTF-8 環境安裝亂碼與 Key Too Long 完整解決方案

     編輯:MySQL 綜合教學

問題背景

MySQL 4.1+ 預設支援 UTF-8(3 bytes/字元),導致 VARCHAR(255) UTF8 索引長度 765 bytes 超過 MyISAM 1000 bytes 單索引上限,安裝報錯 Specified key was too long; max key length is 1000 bytes。同時字元集不匹配造成前後台亂碼。

根因分析

  • latin1 儲存中文雖能顯示,但實為亂碼,phpMyAdmin 不可讀、備份不可用
  • utf8 資料庫下,安裝腳本 mambo.sql 含長度 255 的唯一索引,編碼為 UTF-8 時超長

完整修正步驟

1. 資料庫層面設定 UTF-8

ALTER DATABASE `mambo_db` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

或 phpMyAdmin → 資料庫 → 操作 → 字元集/排序規則 選擇 utf8_general_ci。

2. 修改安裝腳本 installation/sql/mambo.sql

  1. 所有表指定字元集:
    搜尋 TYPE=MyISAM; 替換為
    TYPE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;
  2. 註解/刪除兩個過長唯一索引:
    搜尋並註解(前加 #)以下兩行:
    UNIQUE KEY `section_value_value_aro` (`section_value`, `value`)
    UNIQUE KEY `#__gacl_section_value_value_aro` (`section_value`, `value`)
  3. 在 # 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`);

    將長度從 255 降為 240,並指定 latin1 避免 UTF-8 3倍膨脹,索引長度 240*1*2=480 < 1000,符合限制。

3. 修改 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);

4. 安裝時選擇 UTF-8 編碼

執行安裝精靈,語言/編碼步驟選 UTF-8 完成安裝。

驗證結果

  • 前台中文顯示正常
  • phpMyAdmin 檢視表資料中文正常、編碼為 UTF-8
  • 備份 SQL 檔中文可讀
  • 整合 Discuz! 等 UTF-8 系統,中文帳號註冊顯示正常

升級維護提醒

Mambo 升級覆蓋 includes/database.php 時,必須重新套用上述三行 SET NAMES 代碼,否則升級後亂碼復發。

此方案經多環境驗證,徹底解決 Mambo 4.5.3h 在 MySQL 4.1+ UTF-8 下的安裝與亂碼問題。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved