「sql_mode」变数设定为「non-strict」或「strict」模式后,还可以依照自己的需求加入额外的设定:
设定值 | 说明 |
ALLOW_INVALID_DATES | 允许错误的日期资料 |
NO_ZERO_DATE | 不允许全部是0的日期资料 |
NO_ZERO_IN_DATE | 日期资料中不可以有0 |
ERROR_FOR_DIVISION_BY_ZERO | 除以0时产生错误,而不是产生NULL值 |
如果你希望资料库设定为「strict」模式,可是对于日期资料的检查又可以宽松一些,你可以执行下列的设定:
加入「ALLOW_INVALID_DATES」的设定以后,就算是「2000-02-31」这样一个错误的日期资料,资料库也会储存它,不会有任何警告或错误讯息:
日期型态的栏位,不论在「non-strict」或「strict」模式下,你都可以储存年月日为0的日期资料,不会产生任何警告或错误讯息。如果不希望储存这样的日期资料,你可以加入「NO_ZERO_DATE」与「NO_ZERO_IN_DATE」的设定:
如果在你执行的叙述中出现除以零的运算式,资料库会产生「NULL」值,并不会产生任何警告或错误讯息。你可以加入「ERROR_FOR_DIVISION_BY_ZERO」设定:
在叙述中出现除以零的运算式时,资料库会产生除以零的错误讯息:
你可以使用不同的设定项目,让资料库中的资料更符合自己的需求。MySQL也为你准备了许多不同的设定组合,让你可以方便的完成「sql_mode」的设定:
设定值 | 设定项目 |
ANSI | REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE |
DB2 | PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、NO_FIELD_OPTIONS |
MAXDB | PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER |
MSSQL | PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、NO_FIELD_OPTIONS |
MYSQL323 | NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE |
MYSQL40 | NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE |
ORACLE | PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER |
POSTGRESQL | PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、 NO_TABLE_OPTIONS、NO_FIELD_OPTIONS |
TRADITIONAL | STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER |
注:「sql_mode」的完整设定可以参考MySQL参考手册中的「5.2.6. SQL Modes」。