查看及更改sql_model
show VARIABLES like '%sql_mode%';
or
mysql> select @@sql_mode;
更改sql_model值
set global sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
sudo vi /etc/mysql/my.cnf
在打开的my.cnf文件中添加
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
保存,退出
重启mysql:/etc/init.d/mysql restart
登录mysql:mysql -u root -p
mysql ->select @@sql_mode;
验证sql_mode的值是否改变。
1、ANSI模式:宽松模式,更改语法和行为,使其更符合标准SQL。对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
将当前数据库模式设置为ANSI模式:
mysql> set @@sql_mode=ANSI;
2、TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误,而不仅仅是警告。用于事物时,会进行事物的回滚。 注释:一旦发现错误立即放弃INSERT/UPDATE。如果你使用非事务存储引擎,这种方式不是你想要的,因为出现错误前进行的数据更改不会“滚动”,结果是更新“只进行了一部分”。
将当前数据库模式设置为TRADITIONAL模式:
mysql> set @@sql_mode=TRADITIONAL;
3、STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。如果不能将给定的值插入到事务表中,则放弃该语句。对于非事务表,如果值出现在单行语句或多行语句的第1行,则放弃该语句。
将当前数据库模式设置为STRICT_TRANS_TABLES模式:
mysql> set @@sql_mode=STRICT_TRANS_TABLES;
没有最好与最坏的模式,只有最合适的模式。需要根据自己的实际情况去选择那个最适合的模式!!!
参考:https://blog.csdn.net/ccccalculator/article/details/70432123 https://www.cnblogs.com/cekong/p/10117814.html https://www.cnblogs.com/kiko2014551511/p/11527480.html