1. 定义
    1. 支持哪些SQL语法
      1. support what sql syntax
    2. 做哪种数据校验
      1. what kind of data validation check
  2. 设置
    1. 全局默认设置
      1. --sql-mode option
      2. set @@global.sql_mode
    2. 每个连接单独设置
      1. set @@session.sql_mode
  3. 分类
    1. ANSI
      1. 标准SQL语法
    2. STRICT_TRANS_TABLES
      1. 严格的sql语句校验
      2. 插入或者更新的值必须有效
      3. 对事务表的更新一旦有错则回滚
      4. 对非事务表的更新在第一行出错时放弃
      5. 对非事务表的更新在其他行出错时则自动做出正确的值调整
    3. STRICT_ALL_TABLES
      1. 对非事务表,出错则停止,局部更新
    4. TRADITIONAL
      1. 对待错误的值,给出错误而不是警告
      2. 立即终止
    5. ALLOW_INVALID_DATES
      1. 检查日月,不检查年
      2. 只影响DATE和DATETIME
    6. ANSI_QUOTES
      1. 双引号是标识符
      2. 不能用定义字符串了
    7. ERROR_FOR_DIVISION_BY_ZERO
      1. 除0生成错误而不是警告
    8. HIGH_NOT_PRECEDENCE
      1. NOT的优先级比较高
      2. 新版本的mysql是NOT优先级较低
    9. IGNORE_SPACE
      1. 调用的时候允许函数名和"("之间有空格
      2. 这会导致系统的函数成为标识符,其他地方用这个名字的时候,要加引号
    10. NO_AUTO_CREATE_USER
      1. 禁止grant语句创建无密码的新用户
    11. NO_AUTO_VALUE_ON_ZERO
      1. 用于AUTO_INCREMENT列
      2. 0值不会被取下一个增量赋值
      3. 只有NULL才取增量赋值
    12. NO_DIR_IN_CREATE
      1. 创建新表的时候,忽略INDEX DIRECTORY and DATA DIRECTORY
    13. NO_ENGINE_SUBSTITUTION
      1. 在CREATE TABLE等指定存储引擎不可用的情况下,不使用默认的引擎替换
    14. NO_UNSIGNED_SUBTRACTION
      1. 使用有符号数的减法
    15. REAL_AS_FLOAT
      1. REAL原来是DOUBLE
      2. 设定为FLOAT
  4. 兼容其他数据库