问题:
1.mysql5.7以上的版本创建数据表,datetime默认值设置'0000-00-00',出现异常:Invalid default value for 'create_time'
2.查询时出现Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 't_monitor_receive.username' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
问题分析:
1.首先查看sql_mode,进入数据库,输入以下命令
select @@sql_mode;
发现结果为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
2.分析原因
其中NO_ZERO_IN_DATE,NO_ZERO_DATE,导致了第一个问题,不允许默认设置为'0000-00-00',
而ONLY_FULL_GROUP_BY则导致了第二个问题
解决方法:
修改sql-mode,去掉导致问题的设置,如果出现问题1,就去掉NO_ZERO_IN_DATE,NO_ZERO_DATE,
如果出现问题2,就去掉ONLY_FULL_GROUP_BY
如果跟我一样都出现了,那就都去掉,将sql-mode的值设置为:
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
修改sql-mode的方法
一、临时修改(这种方法只对当前会话有效,重启数据库就失效了)
直接在进入数据库之后输入:
set @@sql_mode = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
二、永久修改
需要修改mysql的配置文件,在配置文件中加入一条
sql-mode= STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
需要注意的是对于mac系统需要修改my.cnf(网上的都是这么做,但是我没有my.cnf,只有my.conf,一开始我在/etc目录下的my.conf中加入上面的设置,但是不起作用,于是只能创建my.cnf)
方法:我觉得多数人可能