xampp中pbootcms换mysql报错主因是php未启用mysqli/pdo_mysql扩展,需在php.ini中取消注释对应行并重启apache;同时须处理sql导出文件中的default语法兼容性问题、database.php中prefix与charset配置须与导入sql一致。

为什么XAMPP里PbootCMS默认走SQLite,但一换MySQL就报错?
因为PbootCMS在XAMPP环境下默认不加载MySQL扩展,mysqli 或 pdo_mysql 模块没启用,database.php 里把 type 改成 mysql 也没用——PHP根本连不上。不是配置写错了,是底层驱动压根没开。
检查方法:访问 http://localhost/phpinfo.php(或新建一个文件写 <?php phpinfo(); ?>),搜索 mysqli 和 pdo_mysql。如果没出现对应模块,说明XAMPP的PHP没启用它们。
- 打开
XAMPP\php\php.ini,取消注释这两行:;extension=mysqli→ 改为extension=mysqli;extension=pdo_mysql→ 改为extension=pdo_mysql - 重启Apache服务(XAMPP控制面板点“Stop”再“Start”)
- 确认
phpinfo()页面里已显示模块加载成功
模板导入后首页空白,但后台能进:SQLite和MySQL的路径权限差异在哪?
模板文件放对了位置(template/your-theme/),后台也显示启用成功,但前台白屏,大概率是数据库读写权限问题。SQLite依赖文件系统权限,MySQL依赖用户权限,XAMPP默认配置下二者行为完全不同。
- SQLite模式下,PbootCMS直接读写
data/pbootcms.db文件,要求Apache进程(通常是SYSTEM或daemon用户)对该文件有读写权限;Windows下右键文件→属性→安全→编辑→添加Users组并勾选“修改” - MySQL模式下,
root用户默认只允许本地连接,但XAMPP的MySQL配置常禁用skip-networking,需确认my.ini中没有该行;同时检查database.php的hostname是127.0.0.1还是localhost——Windows下localhost可能走命名管道而非TCP,建议统一用127.0.0.1 - 若用非
root用户(比如新建的pboot用户),必须显式授权:GRANT ALL ON your_db.* TO 'pboot'@'127.0.0.1'; FLUSH PRIVILEGES;
从SQLite导出SQL再导入MySQL,为什么总卡在 #1101 错误?
#1101 – BLOB, TEXT, GEOMETRY or JSON column 'gtype' can't have a default value 这类错误,本质是SQLite允许给TEXT字段设默认值(如 DEFAULT '4'),而MySQL 5.7+严格模式下禁止这么做。不是工具导出错了,是语法兼容性硬伤。
- 导出时别用
.dump全量导出,推荐用SQLiteStudio→ 右键数据库 → “导出数据库” → 格式选“SQL”,编码选UTF-8,**取消勾选“包含索引”和“包含外键约束”** - 导出后用文本编辑器打开SQL文件,全局搜索
DEFAULT '和DEFAULT(注意空格),替换成DEFAULT '';特别留意gtype、activation、content等TEXT字段 - 把所有
AUTOINCREMENT替换为AUTO_INCREMENT,把INTEGER PRIMARY KEY后面的AUTOINCREMENT单独提出来写成INT AUTO_INCREMENT PRIMARY KEY - 删掉开头的
BEGIN TRANSACTION;和结尾的COMMIT;—— MySQL导入时不认这个
切换后后台登录正常,但文章列表空、分类404:表前缀和字符集踩坑点
最隐蔽的问题往往藏在 database.php 的两个字段里:prefix 和 charset。PbootCMS SQLite版默认无前缀,但MySQL安装包里的 xxx.sql 文件建表时用了 pb_ 前缀;字符集若不匹配,中文字段可能存成乱码,查询时条件失效。
-
prefix必须和你导入的SQL文件里实际建表语句一致。打开/static/backup/sql/下的SQL文件,搜CREATE TABLE,看第一张表名是pb_content还是content—— 前者填'pb_',后者填''(空字符串) -
charset推荐固定用'utf8mb4',对应MySQL里库和表都得是utf8mb4_unicode_ci排序规则;如果原SQL文件建库语句没指定,手动执行:ALTER DATABASE your_db CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci; - 导入SQL后,进phpMyAdmin检查每张表的“排序规则”,必须全为
utf8mb4_unicode_ci,否则即使页面不报错,中文WHERE条件也会查不到数据
真正麻烦的不是步骤多,而是每个环节都依赖上一个环节的输出是否干净——比如导出SQL时漏删索引,会导致MySQL导入中途失败;prefix 配错,后台看着正常,但所有内容查询都返回空数组。动手前先盯住这三处:php.ini 扩展、SQL文件的DEFAULT处理、database.php 的前缀与字符集。











