1.寻找错误原因

1.1开启debug

在typecho根目录index.php文件头部添加下面代码开始debug显示详细报错类容

define('__TYPECHO_DEBUG__',true);

报错类容

SELECT list is not in GROUP BY clause and contains nonaggregated column 'typecho.typecho_relationships.mid' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

1.2报错原因分析

这个错误发生在mysql5.7.5版本及以上版本会出现的问题:mysql5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准";很多从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序由于开启了ONLY_FULL_GROUP_BY的设置,如果select的字段不在group by中,并且select的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法的,就会报错

查看是否开启ONLY_FULL_GROUP_BY

select @@GLOBAL.sql_mode;

2.临时修改方法

通过sql语句去掉ONLY_FULL_GROUP_BY()属性

新建数据库修改语句

SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 
flush privileges;

已有数据库修改语句

SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
flush privileges;

ps:数据库重启后失效

3.永久修改方法

修改数据库的配置文件/etc/mysql/conf.d/mysql.cnf,添加下面的内容,重启mysql服务后生效

[mysqld] 
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

重启服务如出现报错则删掉NO_AUTO_CREATE_USER,在保存重启

[mysqld] 
sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION