ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

Mysql: BLOB, TEXT, GEOMETRY or JSON column 'Fresp' can't have a default value

2022-09-16 13:04:23  阅读:302  来源: 互联网

标签:comment Fresp NO default GEOMETRY mode Fid sql null


环境:
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规定了此限制。

  1. 查询sql_mode,
show variables like '%sql_mode%';


更加普遍的情况是:

  1. 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即可
  1. 重新查询一次,查看是否去除成功;然后再重新创建数据库表即可。

参考

方法二:去除默认值

这种方法适用于公司上的环境,不能随意修改数据库的配置。
主要就是把建表语句中的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;

执行之后,可有发现,是成功的。

标签:comment,Fresp,NO,default,GEOMETRY,mode,Fid,sql,null
来源: https://www.cnblogs.com/CodeWater404/p/16699466.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有