前言:有时候你从别人那(或者其它版本的mysql)dump下来的数据库,加上和别人(之前)同样的软件,可就是见鬼的不能运行。这其中的问题可能是你们的数据库版本不同,其中最主要的就是mysql_mode
的不同。
在不同版本中,mysql_mode
的默认值是不同的。他影响了许多代码中书写不规范的sql语句。而且在不同版本mysql中mysql_mode
的默认值可能会有很大的区别,一些mode被添加,一些mode被移除,或者是结合在一起,又甚至是移除添加移除禁用等等反反复复。
一、用法
1、启动时设置
用--sql-mode="modes"选项启动mysqld来设置默认SQL模式。
如果想要重设,该值还可以为空(--sql-mode ="")
2、启动后设置
用SET [SESSION|GLOBAL] sql_mode='modes'语句设置sql_mode变量来更改SQL模式。
设置 GLOBAL变量时需要拥有SUPER权限,并且会影响从那时起连接的所有客户端的操作。
设置SESSION变量只影响当前的客户端。任何客户端可以随时更改自己的会话 sql_mode值。
3、通过配置文件设置
在my.cnf(my.ini)添加如下配置:
[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,NO_AUTO_VALUE_ON_ZERO'
二、sql_mode常用值
1、主要sql_mode:
ANSI :宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
TRADITIONAL :严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
STRICT_TRANS_TABLES :严格模式,进行数据的严格校验,错误数据不能插入,报error错误。