Mysql: BLOB, TEXT, GEOMETRY or JSON column 'Fresp' can't have a default value
环境:
MySQL8.0
问题
建表的时候出现错误,语句如下:
create table t_user ( Fid bigint not null auto_increment comment '主键ID,自动增长', FuserId int not null comment '用户ID', Ftext text not null default ' ' comment '用户内容', primary key (Fid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
乍看之下,没什么明显错误。但是执行之后报错误BLOB, TEXT, GEOMETRY or JSON column 'Ftext' can't have a default value
。
解决
方法一:改sql_mode
原因: 问题的出现是因为MySQL对于BLOB、TEXT、GEOMETRY和JSON字段是不允许有默认值的,在mysql5.7以后就有了严格模式sql_model
规定了此限制。
- 查询sql_mode,
show variables like '%sql_mode%';
更加普遍的情况是:
STRICT_TRANS_TABLES
即是导致上面报错产生的原因,去掉它即可。
set sql_mode="NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"; # 后面的赋值主要看你自己sql_mode查询出来的情况,然后去掉STRICT_TRANS_TABLES即可
- 重新查询一次,查看是否去除成功;然后再重新创建数据库表即可。
方法二:去除默认值
这种方法适用于公司上的环境,不能随意修改数据库的配置。
主要就是把建表语句中的default
关键字去掉即可。
具体入下,可以对比上面参照:
create table t_user ( Fid bigint not null auto_increment comment '主键ID,自动增长', FuserId int not null comment '用户ID', Ftext text not null comment '用户内容', primary key (Fid) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
执行之后,可有发现,是成功的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言