船说 CMSmysql5.6 可以正常运行吗

juming
juming 初级会员超兽战士
发布于 2026-10-08 10:52 ·2 浏览 ·0 回复

看完这篇你能判断手里的船说CMS 到底能不能装在 MySQL 5.6 上,以及装不上时报错该怎么改。先给结论:多数版本的船说CMS 在 MySQL 5.6 上可以跑起来,但不是解压就能装——通常要改三处:字符集、索引长度限制、sql_mode。如果你的安装包里出现了 json 字段类型,那 5.6 直接无解,必须换 5.7 及以上。

第一步:确认你的版本和它的真实要求

这一步要搞清楚"官方说要求 5.7"是不是硬要求,拿到判断依据再动手。

先看版本号:打开源码根目录的 application/ 或 app/ 下的 config.php、database.php,以及根目录的 README.md、install/ 里的说明文件。多数船说CMS 的安装说明写的是 PHP 7.0+ / MySQL 5.7+,其中 5.7 主要就是因为字符集默认走 utf8mb4。

再确认服务器上的实际版本,命令行执行:

mysql -uroot -p -e "SELECT VERSION();"

宝塔面板用户走:软件商店 → 已安装 → MySQL 5.6 → 设置,首页就能看到版本号。只要大于 5.5.3,utf8mb4 本身就是支持的,问题不在"能不能存",而在"索引能不能建"。

第二步:翻 SQL 文件,找 5.7 专属写法

这一步决定你后面是"改配置"还是"换数据库"。

在源码根目录执行:

grep -rniE "json|utf8mb4|CURRENT_TIMESTAMP\(|ROW_FORMAT" ./install/*.sql | head -50

对照结果判断:

  • 只搜到 utf8mb4 → 能救,往下走第三步。
  • 搜到 json 类型字段(形如 ` xxx json DEFAULT NULL )→ MySQL 5.6 不支持 JSON 数据类型,只能手工把它改成 text`,或者直接升级到 MySQL 5.7。
  • 搜到 DEFAULT CURRENT_TIMESTAMP 用在多个字段上 → 5.6 是支持的(5.5 才只允许一个),不用管。

注意:grep 的路径按你实际解压后的目录调整,有的包把 SQL 放在 data/、sql/ 或 install/data/ 下。

第三步:改 MySQL 5.6 的四个关键参数

这一步解决的是 5.6 的 InnoDB 索引前缀只有 767 字节、装 utf8mb4 时 varchar(255) 索引直接超长的老问题。

编辑 my.cnf(宝塔用户走 软件商店 → MySQL 5.6 → 设置 → 配置修改,改完点"重载配置";命令行用户改 /etc/my.cnf 后执行 service mysql restart):

[mysqld]
innodb_file_per_table = 1
innodb_file_format = Barracuda
innodb_large_prefix = ON
default-storage-engine = InnoDB
character-set-server = utf8
collation-server = utf8_general_ci
sql_mode = NO_ENGINE_SUBSTITUTION

其中 innodb_large_prefix = ON 把索引前缀上限提到 3072 字节,innodb_file_format = Barracuda 是它的前置条件,两者必须同时有。

如果不想动数据库全局配置,退一步的办法是把 SQL 文件里的 utf8mb4 全部替换成 utf8、utf8mb4_general_ci 替换成 utf8_general_ci,再把 varchar(255) 的索引字段改成 varchar(191)。

注意:innodb_large_prefix 生效的前提是建表时用 ROW_FORMAT=DYNAMIC。5.6 里默认行格式是 COMPACT,必要时在 SQL 文件的 ENGINE=InnoDB 后面补上 ROW_FORMAT=DYNAMIC。

第四步:对号入座处理安装报错

这一步是把上面几步落到具体报错上。

报 #1071 - Specified key was too long; max key length is 767 bytes
→ 第三步的参数没生效,重载配置后重新导入;或者按上面的退一步方案改 SQL。

报 #1067 - Invalid default value for 'create_time'
→ sql_mode 太严。在 phpMyAdmin 里先执行:

SET SESSION sql_mode = 'NO_ENGINE_SUBSTITUTION';

再导入 SQL。命令行导入则用:

mysql -uroot -p --default-character-set=utf8 你的数据库名 < install.sql

报 #1064 且提示 json 附近语法错误
→ 确认是 JSON 字段,5.6 无法兼容,换 5.7。

装完页面中文变问号
→ 检查 database.php 里的 charset 是否和库的字符集一致,统一成 utf8 或统一成 utf8mb4,别一半一半。

第五步:想清楚要不要继续用 5.6

MySQL 5.6 官方已经停止支持,没有安全更新,而这个 CMS 后续版本大概率会往 5.7/8.0 走。如果你的服务器允许,直接上 MySQL 5.7 或 8.0,上面第二到第四步的坑一个都不会遇到;只有在服务器是老旧环境、动不了数据库版本时,才值得按本文去改 5.6。

小结

  • 船说CMS 在 MySQL 5.6 上通常能跑,前提是 SQL 文件里没有 json 字段类型。
  • 先 SELECT VERSION(); 确认版本,再用 grep 扫 SQL 文件里的 json/utf8mb4,判断是改配置还是换数据库。
  • 5.6 三个必调项:innodb_large_prefix = ON、innodb_file_format = Barracuda、sql_mode = NO_ENGINE_SUBSTITUTION。
  • 索引超长的报错是 #1071,时间字段报错是 #1067,UTF-8 问题优先查连接字符集和库字符集是否统一。
  • 能升 5.7/8.0 就别耗在 5.6 上,5.6 已停止安全更新。
版权声明:本文来自 GJ站长论坛《船说 CMSmysql5.6 可以正常运行吗》
原文链接:https://www.gj0.com/thread-909.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。

全部回复 0

还没有回复,来抢沙发~