MySQL 提示 Field * doesn't have a default value 的解决办法

d52a2834349b033bdaf702ea1cce36d3d539bd87.png

解决办法

在 MySQL 5.7 以上版本中,启用了严格模式。

在配置文件中 /etc/mysql/my.cnf 中找到:

sql-model=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

修改为:

sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

然后重启 MySQL

STRICT_TRANS_TABLES 存储引擎启用严格模式,非法数据值被拒绝

出现此问题的原因

在 MySQL 5.0.2 以前,MySQL 对非法值检查并不严厉,而且为了数据输入还会强制将他们变为合法值。

在 MySQL 5.0.2 以后的版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。

严格模式

如果未使用严格模式,下面的情况是合法的:

1、如果将不正确的值插入到列,如将 null 值插入非 null 列,或将过大的数据插入数值列,MySQL 会将这些列设置为最可能的值,而不是抛出错误信息。
2、如果视图将超过范围的值保存到数值列,MySQL 服务器将保存 0 (最小的可能值) 取而代之,或最大的可能值。
3、对于字符串,MySQL 或保存空字符串,或将字符串可能多的部分保存到列中。
4、如果打算将不是以数值开头的字符串保存到数值列,MySQL 将保存 0 。
5、MySQL 允许将特定的不正确日期值保存到 DATE 和 DATETIME 列(如:2000-02-31 或 2000-02-00)。其观点在于,验证日期不是 SQL 服务器的任务。如果 MySQL 能保存日期值并准确检索相同的值,MySQL 就能按给定的值保存它。如果日期完全不正确(超出服务器能保存的范围)将在列中保存特殊的日期值 0000-00-00 取而代之。
6、如果视图将 null 值保存到不接受 null 值的列,对于单行 insert 语句,将出现错误。对于多行 insert 语句或者 insert into ... select 语句,MySQL 服务器会保存针对列数据类型的隐含默认值。一般情况下,对于数值类型,它是 0,对于字符串类型,它是空字符串(''),对于日期和时间类型是 zero 。
7、如果 insert 语句未为列指定值,如果列定义包含明确的 default 子句,MySQL 将插入默认值。如果在定义中没有这类 default 子句,MySQL 会插入列数据类型的隐含默认值。
8、采用前描述规则的原因在于,在语句开始执行前,无法检查这些情况。如果在更新了数行后遇到这类问题,我们不能仅靠回滚解决,这是因为存储引擎可能不支持回滚。中止语句并不是良好的选择,在该情况下,更新完成了 “一半”,这或许是最差的情况。对于本例,较好的方式是 “尽可能做到最好”,然后就像什么都没有发生那样继续执行。

在 MySQL 5.0.2 以后的版本中,可以使用 STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES SQL 模式,选择更严格的处理方式。

STRICT_TRANS_TABLES的工作方式:

1、对于事务性存储引擎,在语句中任何地方出现的不良数据值均会导致放弃语句并执行回滚。
2、对于非事务性存储引擎,如果错误出现在要插入或更新的第 1 行,将放弃语句。(在这种情况下,可以认为语句未改变表,就像事务表一样)。首行后出现的错误不会导致放弃语句。取而代之的是,将调整不良数据值,并给出告警,而不是错误。换句话讲,使用 STRICT_TRANS_TABLES 后,错误值会导致 MySQL 执行回滚操作,如果可以,所有更新到此为止。

要想执行更严格的检查,请启用 STRICT_ALL_TABLES。除了非事务性存储引擎,它与 STRICT_TRANS_TABLES 等同,即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃语句。这意味着,如果错误出现在非事务性表多行插入或更新过程的中途,仅更新部分结果。前面的行将完成插入或更新,但错误出现点后面的行则不然。对于非事务性表,为了避免这种情况的发生,可使用单行语句,或者在能接受转换警告而不是错误的情况下使用 STRICT_TRANS_TABLES。要想在第 1 场合防止问题的出现,不要使用 MySQL 来检查列的内容。最安全的方式(通常也较快)是,让应用程序负责,仅将有效值传递给数据库。

有了严格的模式选项后,可使用 INSERT IGNORE 或 UPDATE IGNORE 而不是不带 IGNORE 的 INSERT 或 UPDATE,将错误当作告警对待。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353