MySQL中sql_mode的設置


在升級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版本估計就有問題了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM