在升級MySQL版本到8.0的過程中,需要關注sql_mode參數默認值的變化,8.0版本sql_mode不支持 NO_AUTO_CREATE_USER,要避免配置的sql_mode中帶有 NO_AUTO_CREATE_USER
■ 57版本原來配置
show variables like '%sql_mode%';
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
■ 修改配置文件
注釋掉sql_mode,並重啟,查看57版本的默認設置
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
■ 修改全局變量
對新建的所有會話生效,但是對已經連接的會話無效
set global sql_mode ='';
■ 修改會話變量
只對當前會話生效
set sql_mode ='';
■ 修改配置文件
設置sql_mode='',重啟后,則sql_mode為空了。
■ 以下測試
create database test;
grant CREATE, DROP, INSERT, SELECT, DELETE, UPDATE, ALTER on test.* to inspur@'%' identified by 'password';
set password for inspur@'%' = password('password');
drop user inspur@'%';
drop database test;
flush privileges;
set sql_mode ='NO_AUTO_CREATE_USER';
grant CREATE, DROP, INSERT, SELECT, DELETE, UPDATE, ALTER on test.* to inspur@'%' identified by 'password';
set global sql_mode ='';
grant CREATE, DROP, INSERT, SELECT, DELETE, UPDATE, ALTER on test.* to inspur@'%' identified by 'password';
均可以執行,在80版本估計就有問題了。