返回介绍

2 Non-Strict 模式

发布于 2025-02-20 13:00:33 字数 3417 浏览 0 评论 0 收藏 0

下列是使用“SET”设定“sql_mode”变量的语法:

如果没有指定“SESSION”或“GLOBAL”的话,MySQL 会把这个设定当成“SESSION”,设定的效果只有一个用户端的连线,并不会影响其它用户端连线的设定。下列的范例设定为“non-strict”模式后,使用“SHOW”或“SELECT”叙述查询设定后的结果:

如果你希望将所有用户端都设定为“non-strict”模式,那就要使用“GLOBAL”关键字:

设定为“non-strict”模式以后,在执行资料维护时,如果资料完全符合字段资料型态的规定,那就不会发生任何警告或错误:

如果数据库发现不符合字段规定的资料,它会尽量试着处理这些错误的资料,再把资料储存起来。以下列的范例来说,想要储存到字串型态字段的值有六个字符,可是“fchar”字段只能储存三个字符,数据库在“non-strict”模式下,会忽略多余的字符后再储存起来,然后使用警告讯息通知你:

在 non-strict 模式运作时,下列几种情形都有可能会启动自动修正资料的功能:

  • 执行新增或修改叙述,包含 INSERT、REPLACE、UPDATE 与 LOAD DATA INFILE
  • 使用 ALTER TABLE 修改表格的字段定义
  • 在字段定义中使用“DEFAULT”指定字段的默认值

注:“LOAD DATA INFILE”在“汇入与汇出资料、使用 SQL 叙述汇入资料”中讨论。

2.1 数值

数据库在“non-strict”模式下,处理数值资料型态会使用比较宽松的方式。以整数型态“TINYINT”来说,如果储存的数值超过规定的范围,数据库会依照下列的方式来处理错误的数值资料:

浮点数型态与整数型态一样有规定的范围,如果你在定义浮点数型态字段时,也设定了长度与小数位数,那就只能储存设定的范围:

注:储存小数到整数型态的字段,或是小数位数超过浮点数型态定义的位数,MySQL 会针对小数的部份执行四舍五入,并不会有任何错误或警告。

2.2 列举(ENUM) 与集合(SET)

“ENUM”型态只能储存一个规定好的成员资料,以“fenum”字段来说,它设定了 A、B、C 三个成员,你也可以使用数值 1、2、3 表示。在“non-strict”模式下,如果你尝试储存错误的资料,数据库都会储存空的字串“"”,数值为 0:

“SET”型态可以储存一组规定好的成员资料,以以“fset”字段来说,它设定了 X、Y、Z 三个成员。在“non-strict”模式下,如果你尝试储存错误的资料,数据库都会储存空的字串“"”,数值为 0;如果指定的成员不正确的话,数据库也会自动忽略它们:

注:重复的集合成员不会造成任何错误或警告。例如储存“’X,X,Y,Y,Z,Z’”的值到“fset”字段,实际储存的是“’X,Y,Z’”。

2.3 字串转换为其它型态

数据库设定为“non-strict”模式的时候,如果你想要储存字串资料到非字串型态的字段,数据库都会帮你转换为字段的型态后再储存。如果字串的内容不能转换为字段的型态,例如想要储存字串“Hello!”到数值型态字段,数据库会储存下列的默认值,然后产生警告讯息:

字段型态默认值字段型态默认值
数值0TIMESTAMP'0000-00-00 00:00:00'
DATE'0000-00-00'YEAR0000 或 00
TIME'00:00:00'ENUM''
DATETIME'0000-00-00 00:00:00'SET''

在执行字串转换型态的时候,数据库会使用很宽松的方式,尽量把你的资料储存起来,尤其是字串转换为数值与日期型态:

字串值fintfdate
'10-10-10'10'2010-10-10'
'007'7'0000-00-00'
'SAM36'0'0000-00-00'
'36SAM'36'0000-00-00'
'25-SAM'25'0000-00-00'
'12 SAM'12'0000-00-00'
'SAM'0'0000-00-00'

2.4 NULL 与 NOT NULL

在规划表格字段的时候,你会根据需求设定字段是否可以储存“NULL”值。如果你设定某一个字段不可以储存“NULL”值,不论在“non-strict”或“strict”模式下,储存“NULL”值的叙述都会发生错误讯息:

数据库设定为“non-strict”模式的时候,下列的情况只会产生警告讯息:

2.5 Strict 模式与 IGNORE 关键字

你也可以将数据库设定为“strict”模式,在这个模式下,只有在储存字串资料到非字串型态的字段时,数据库会尝试帮你指定的字串转换为字段型态;其它任何违反资料型态的问题,数据库不会储存错误的资料,而且会产生错误讯息。

在“strict”模式模式下执行新增与修改时,可以依照需求加入“IGNORE”关键字:

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文