必须设为utf8mb4,否则moodle 3.5+安装会因specified key was too long或incorrect string value报错;xampp默认未显式配置,需手动修改my.ini/my.cnf,添加character-set-server=utf8mb4等参数并重启服务。

MySQL 字符集必须设为 utf8mb4,否则安装中途报错
看到 Specified key was too long 或 Incorrect string value 错误?这不是 Moodle 代码问题,而是 MySQL 默认字符集不满足要求。Moodle 3.5+ 强制要求数据库及表默认使用 utf8mb4,而 XAMPP 自带的 MySQL 5.7+ 虽默认支持,但配置文件常未显式声明,导致实际生效的是 latin1 或旧版 utf8(仅支持 BMP 字符)。
实操建议:
- 编辑
C:\xampp\mysql\bin\my.ini(Windows)或/Applications/XAMPP/xamppfiles/etc/my.cnf(macOS) - 在
[mysqld]段下添加:character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix = 1
- 在
[client]和[mysql]段各加一行:default-character-set = utf8mb4 - 保存后重启 MySQL 服务,并用命令验证:
mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%';"—— 所有输出项值都应为utf8mb4
数据库必须手动创建,且不能依赖安装向导自动建库
Moodle 安装向导里的“自动创建数据库”功能在 XAMPP 下极不稳定,尤其当 MySQL 配置未完全生效时,容易卡在“正在创建表”阶段或抛出权限错误。更稳妥的方式是提前用 phpMyAdmin 或命令行建库,并指定字符集与排序规则。
实操建议:
- 访问
http://localhost/phpmyadmin,点击“新建”,库名填moodle - 在“排序规则”下拉菜单中,明确选择
utf8mb4_unicode_ci(不是utf8_general_ci或utf8mb4_general_ci) - 或者用命令行执行(需先登录):
CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
- 确保用户
root对该库有全部权限:GRANT ALL PRIVILEGES ON moodle.* TO 'root'@'localhost'; FLUSH PRIVILEGES;
PHP 连接驱动要选 mysqli,不是 mysql 或 mariadb
在环境检查页看到 $CFG->dbtype 报错提示“请从 ‘mysql’ 改为 ‘mariadb’”?这是误导。XAMPP 自带的是 MySQL,不是 MariaDB;且 Moodle 早已弃用旧的 mysql 扩展(PHP 7.0+ 已移除),必须用 mysqli 驱动。
XAMPP 8.0.30 是一款免费、开源的跨平台 Web 服务器集成包,专为快速搭建本地 PHP 开发环境而设计。该版本核心组件包括:Apache 2.4.56、MySQL 8.0.33、PHP 8.0.30、phpMyAdmin 5.2.1 等。它支持 Windows、Linux 和 macOS 系统,可让开发者在个人电脑上轻松模拟服务器环境,无需复杂配置即可运行 WordPress、ThinkPHP 等主流 PHP 应用。XAMPP 8.0.30 在保持兼容性的同时,优化了 PHP 8.0 的性能与
实操建议:
- 安装过程中“选择数据库”步骤,下拉选项里选
MySQLi(注意拼写含i) - 若已生成
config.php且报错,打开它,确认这一行:$CFG->dbtype = 'mysqli'; - 不要改成
mariadb—— 即使你用的是较新 XAMPP(含 MariaDB),其 PHP 驱动名仍是mysqli,Moodle 内部会自动适配 - 检查
php.ini中extension=mysqli已启用(XAMPP 通常默认开启,但务必确认)
dataroot 目录不能放在 htdocs 内,且必须 Apache 可写
把 moodledata 目录直接丢进 htdocs/moodle/ 是常见误区。这会导致两个严重问题:一是 Web 可直接访问上传文件和缓存,存在安全风险;二是 Windows 下 Apache(以 daemon 用户运行)对子目录权限继承混乱,常报“Permission denied”写入失败。
实操建议:
- 在 XAMPP 根目录外单独建一个路径,例如:
C:\moodledata(Windows)或/Users/yourname/moodledata(macOS) - 安装时在“数据目录”字段填这个绝对路径(不要用相对路径或
../) - Windows 下右键该文件夹 → 属性 → 安全 → 编辑 → 添加用户
Everyone或SYSTEM,赋予“完全控制” - macOS/Linux 下执行:
sudo chown -R daemon:daemon /path/to/moodledata && sudo chmod -R 755 /path/to/moodledata
最易被忽略的一点:所有配置改完后,Apache 和 MySQL 必须分别重启,不是只点一次“Restart All”。XAMPP 控制面板里两个服务的状态灯变绿才算真正生效。任何一项没重启,phpinfo() 看到的仍是旧配置,Moodle 就会继续报环境不满足。










