mysql给text设置一个默认值(干货)

10,973 阅读2分钟

这周有个需求里面原先是用redis的,但是后面经同事介绍说明,决定还是用mysql,当时想在表里面加一个text字段,但是考虑到程序其他地方会不会有对该表的插入操作,所以不经思索的就说给text字段加一个默认值,但是同事说不行,text字段不能有默认值。这才仔细想来好像自己也从没有给text字段设置过默认值。

除了text字段不能默认值,还有哪些字段也不能设置默认值?

Mysql5.7版本:BLOB, GEOMETRY, JSON

为什么不能给text字段设置默认值?

我看了mysql官方文档上面只有一句话BLOB and TEXT columns cannot have DEFAULT values.。但是我想细究下到底为什么,然后看到了Strict SQL Mode

那什么是Strict SQL Mode?

严格模式控制MySQL如何处理数据更改语句(如INSERT或)中的无效或缺失值UPDATE。由于多种原因,值可能无效。例如,列可能具有错误的数据类型,或者可能超出范围。当要插入的新行不包含其定义中NULL没有显式DEFAULT子句的非列的值时,缺少值。(对于 NULL列,NULL如果缺少值,则插入。)简单来理解就是MySQL自身对数据进行严格的校验(格式、长度、类型等)

MySQL开启了严格模式从一定程序上来讲,是对我们写的代码的一种测试,如果我们的开发环境没有开启严格模式在开发过程中也没有遇到错误,那么在上线或代码移植的时候将有可能出现不兼容的情况,因此在开发过程做最好开启MySQL的严格模式。

Strict SQL Mode的作用?

1 不为null的字段不能写入null数据。 2 text字段没有默认值 3 自增长的字段不能自定义值

就是想给text设置一个默认值?

如果非要给text设置一个默认值,只能关闭严格模式,具体做法如下所示:(以我的win10环境为例) 方法1.可以通过执行SQL语句来开启(只对当前连接有效): set sql_mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";

方法2.通过修改MySQL的配置文件,如果有sql-model就直接修改成:sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,如果没有则在[mysqld]下加上这句话,之后重启mysql。