这周有个需求里面原先是用redis的,可是后面经同事介绍说明,决定仍是用mysql,当时想在表里面加一个text字段,可是考虑到程序其余地方会不会有对该表的插入操做,因此不经思索的就说给text字段加一个默认值,可是同事说不行,text字段不能有默认值。这才仔细想来好像本身也从没有给text字段设置过默认值。mysql
Mysql5.7版本:BLOB, GEOMETRY, JSONredis
我看了mysql官方文档上面只有一句话BLOB and TEXT columns cannot have DEFAULT values.
。可是我想细究下到底为何,而后看到了Strict SQL Mode
!sql
严格模式控制MySQL如何处理数据更改语句(如INSERT或)中的无效或缺失值UPDATE。因为多种缘由,值可能无效。例如,列可能具备错误的数据类型,或者可能超出范围。当要插入的新行不包含其定义中NULL没有显式DEFAULT子句的非列的值时,缺乏值。(对于 NULL列,NULL若是缺乏值,则插入。)简单来理解就是MySQL自身对数据进行严格的校验(格式、长度、类型等)测试
MySQL开启了严格模式从必定程序上来说,是对咱们写的代码的一种测试,若是咱们的开发环境没有开启严格模式在开发过程当中也没有遇到错误,那么在上线或代码移植的时候将有可能出现不兼容的状况,所以在开发过程作最好开启MySQL的严格模式。code
1 不为null的字段不能写入null数据。 2 text字段没有默认值 3 自增加的字段不能自定义值cdn
若是非要给text设置一个默认值,只能关闭严格模式,具体作法以下所示:(以个人win10环境为例) 方法1.能够经过执行SQL语句来开启(只对当前链接有效): set sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
blog
方法2.经过修改MySQL的配置文件,若是有sql-model就直接修改为:sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
,若是没有则在[mysqld]下加上这句话,以后重启mysql。开发