mysql设置text字段为not null,并且没有默认值,插入报错:doesn't have a default value

一、问题描述

在往数据库写入数据的时候,报错:

'字段名' doesn't have a default value

      本来这个错误是经常见到的,无非就是字段没有设置默认值造成的。奇怪的是,我这边报错的字段,其类型是text类型。众所周知的,text类型是不能有默认值的。如此一来就有了矛盾,text类型的字段明明不能有默认值,那么为什么还会给我报错,提示缺少默认值呢?

二、问题所在

1、查看字段类型

通过phpmyadmin查看数据表的字段结构,发现text字段在创建的时候,语法为:

//创建字段abstract为text类型,默认为not null
ALTER TABLE `表名` ADD COLUMN `abstract`  text not null  after `content`;

      这个创建语句乍一看没有问题,但是如果text类型既没有默认值,也不能为null的话,那么插入的时候,肯定是会出现问题的。

2、解决方案

按照上面的推测逻辑,重新修改字段属性:

//这里修改abstart字段的类型为text类型,去掉了not null
ALTER TABLE `表名` modify COLUMN `abstract`  text;

      然后进行测试,发现写入数据成功。此时查看phpmyadmin的数据表结构,发现此时字段的默认值为null了。果然是not null的问题,问题是,创建数据表的时候,尽量设置字段为not null已经成为共识。。虽然解决了问题,但博主还是不太理解原理是什么。

关于mysql默认值和设置not null

你可能感兴趣的:(mysql,mysql进阶篇)