在规划与设计一个资料库的时候,你会针对储存资料的需求,定义每一个表格中的栏位,包含栏位的资料型态与其它的设定,这些定义都会影响资料的查询与维护。资料库中储存的资料应该是正确而且没有误差的,如果你尝试储存一个错误的资料,资料库应该要发现问题并告诉你不可以这样做;不过在不同的需求下,你可能会希望资料库允许不太严重的错误,不要每次都产生错误讯息。
MySQL资料库环境中,可以使用「sql_mode」系统变数设定资料库对于检查错误资料的「严格」程度,分为「strict」与「non-strict」两种模式。在strict模式下,资料库会严格的检查与发现错误的资料,而且不会储存错误的资料;在non-strict模式下,资料库同样会检查与发现错误的资料,不过它会尽量试着处理这些错误的资料,再把资料储存起来。
你可以依照自己的需求设定「sql_mode」系统变数,下列的指令可以设定为「non-strict」模式:
下列的叙述设定为「strict」模式:
「STRICT_TRANS_TABLES」与「STRICT_ALL_TABLES」同样可以设定为「strict」模式,在使用支援「交易、transaction」的资料库,应该要设定为「STRICT_TRANS_TABLES」,这样可以确定资料的完整性。
设定为「strict」与「non-strict」两种不同的模式,对于错误资料的处理会有很大的差异。下列是一个用来测试的表格「cmdev.debug」,它包含许多不同资料型态与设定的栏位:
栏位名称 | 型态 | NULL | 索引 | 预设值 | 其它资讯 |
fint | tinyint(4) | NO | NULL | ||
fchar | varchar(3) | YES | NULL | ||
fdouble | double(5, 2) | YES | NULL | ||
fdate | date | YES | NULL | ||
ftime | time | YES | NULL | ||
fenum | enum('A','B','C') | YES | NULL | ||
fset | set('A','B','C') | YES | NULL |