sql_mode 之影响:
- sql_mode=’ansi’; 则当插入时,如果数据超长,则截断插入;有时候,这不是我们想要的
总结:
- sql_mode=’TRADITIONAL’; 可以避免很多不必要的意外;
12345678910mysql> set @@sql_mode='TRADITIONAL';Query OK, 0 rows affected (0.00 sec)mysql> select @@sql_mode;+------------------------------------------------------------------------------------------------------------------------------------------------------+| @@sql_mode |+------------------------------------------------------------------------------------------------------------------------------------------------------+| STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |+------------------------------------------------------------------------------------------------------------------------------------------------------+1 row in set (0.00 sec)
TRADITIONAL 等价于 下面一系列标准的集合 - 注意: 与innodb_strict_mode的区别
实际应用:
- 可以直接在 /etc/my.cnf 中修改sql_mode,如下:(需要重启mysql)
12[mysqld]sql_mode=traditional - 如果不方便重启mysql,则可以在执行sql语句前进行回话级别的设置,如下:
1set session sql_mode='TRADITIONAL';
(每次连接后都需要执行,比较麻烦;对于长连接的场景,该设置的花费可以忽略) - 设置全局sql_mode:
1set global sql_mode='TRADITIONAL';
注意:
1) 需要有超级权限
2) 对当前session无效;要么退出再进来,要么再设置一下当前回话的sql_mode
3) 该设置重启mysqld就没了,最好在my.cnf 中写一下
参考资料: