MySQL5.7 datetime无法设置默认值为0

在mysql5.7以上版本中,如果datetime默认值为0,则会出现下面的错误:

ERROR 1067 (42000) at line xxx: Invalid default value for 'xxx'

这是因为mysql5.7调整了校验规则,修改一下/etc/mysql/my.cnf配置文件就可以了

[mysqld]
#默认规则
#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"
sql-mode="ONLY_FULL_GROUP_BY,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

然后重启mysql就可以啦。

MySQL忘记管理员密码

方法一:
1、关闭mysql授权

#关闭mysql
/etc/init.d/mysql stop

#以不需要授权的模式启动mysql
#修改/etc/mysql/my.cnf添加下面的内容
[mysqld]
skip-grant-tables

#开启mysql
/etc/init.d/mysql start

2、修改密码

#登录mysql
mysql
mysql> use mysql;
#旧版本
mysql> UPDATE user SET password=password("xxx") WHERE user='root';
#新版本
mysql> update user set authentication_string=PASSWORD('xxx') where User='root';
mysql> flush privileges;
mysql> exit; 

3、开启mysql授权

#关闭mysql
/etc/init.d/mysql stop

#以不需要授权的模式启动mysql
#修改/etc/mysql/my.cnf禁用skip-grant-tables
[mysqld]
#skip-grant-tables

#开启mysql
/etc/init.d/mysql start

4、搞定

方法二
1、关闭mysql授权

#关闭mysql
service mysql stop

#以不需要授权的模式启动mysql
mysqld_safe --skip-grant-tables

2、修改密码

#登录mysql
mysql
mysql> use mysql;
#旧版本
mysql> UPDATE user SET password=password("xxx") WHERE user='root';
#新版本
mysql> update user set authentication_string=PASSWORD('xxx') where User='root';
mysql> flush privileges;
mysql> exit; 

3、开启mysql授权

#关闭mysql
service mysql stop

#开启mysql
service mysql start

4、搞定

MySQL导入SQL文件

mysql -u user_name -p -D db_name< path_to_sql/xxx.sql
或
mysql> source path_to_sql/xxx.sql