1. 程式人生 > 其它 >MySQL中sql_mode的設定

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