- 本文地址: https://www.yangdx.com/2020/08/162.html
- 转载请注明出处
某天,给表新增一个字段,类型为 TEXT,想设置默认值为空字符串,SQL 语句如下:
ALTER TABLE `table1` ADD `content` TEXT NOT NULL DEFAULT '';
执行的时候报错了:
#1101 - BLOB, TEXT, GEOMETRY or JSON column 'content' can't have a default value
就是说,BLOB、TEXT、GEOMETRY、JSON 这些类型的字段是不能设置默认值的。这是由于 MySQL 5.7 默认启用了严格模式导致的。
修改配置文件中的 sql-mode 可以解决这个问题,但是不建议改,因为如果做了集群的话很难保证每台服务器这个设置都统一。
两种解决办法
方法一:TEXT 类型的长度是 65535 个字符,VARCHAR 类型的最大长度也是 65535,如果存储的字段没有这么长,完全可以用 VARCHAR 代替 TEXT。但是对于 MEDIUMTEXT、LONGTEXT 类型就不行了。
方法二:把SQL 语句中的 NOT NULL 限制去掉,允许字段为 NULL,即:
ALTER TABLE `table1` ADD `content` TEXT;
这样在插入数据的时候,如果没有指定值,该字段默认就是 NULL。但是这破坏了不用 NULL 的设计原则。
以上两种方法,自己根据情况取舍。
快来评论一下吧!
发表评论