一、背景

在插入数据库时,报错#1364,后来才知道是字段在创建的时候,没有设置默认值的原因。关于默认值,我们都知道设置默认值为0或者null的时候,就算我们不插入该字段,数据库也会自动按照默认值填充,那么为什么一定要设置默认值呢?

二、解释

这部分参考链接:https://segmentfault.com/q/1010000000411353

错误的原因是没启用MySQL的严格模式(strict mode),很多快捷开发环境自带的MySQL(PHPnow WAMP Appserv等),都没有启用严格模式,甚至是在一些产品环境(production environment)都忽略了这点。

非严格模式下,MySQL会容忍许多开发上的疏忽,例如把一个长度100的字符串插入到varcaht中只会截断多余的部分而不报错。严格模式对数据的格式、长度、类型等进行校验,你贴出的建表语句中指定了DEFAULT,如果此时不指定DEFAULT,在你认为会启用默认值的时候会返回#1364错误。

开发阶段最好启用严格模式,这是对我们代码严谨性的测试,严进宽出也能保证转移到产品环境和后续的数据库迁移、重构顺利。

为什么数据库要设置默认值呢?因为我们希望在插入数据时,有意或无意间被忽略的字段能够交由MySQL按你事先预想的方式处理,例如一些默认正常状态码、用户插入数据时候尚未设置的文本字段,诸如此类。

我的习惯是任何数据表的任何列都是非空(NOT NULL),在此基础上将数字默认设为0,文本默认设为’’(在PHPMyAdmin中留空)。这里涉及一个NULL和’‘的区别,对此我所知尚少,我使用’‘的原因是根据语义NULL表示“此字段值为空”,而’'表示“此字段暂未设置值”。另一个原因是在MyISAM引擎下,NULL对索引、索引统计、磁盘占用都会有额外的开销,一个允许为NULL的列,每个字段的长度都比NOT NULL的多1bit,我不确定最近几年是否有所改善,涉及到NULL的资料大概是在MySQL5.0时看过的。

三、严格模式

这段文字说的特别好,里面提到了mysql的严格模式。那么什么是严格模式呢?

1、定义

简单来说就是MySQL自身对数据进行严格的校验(格式、长度、类型等),比如一个整型字段我们写入一个字符串类型的数据,在非严格模式下MySQL不会报错,同样如果定义了char或varchar类型的字段,当写入或更新的数据超过了定义的长度也不会报错。

2、如何开启

找到mysql安装目录下的my.cnf(windows系统则是my.ini)文件

在sql_mode中加入STRICT_TRANS_TABLES则表示开启严格模式,如没有加入则表示非严格模式,修改后重启mysql即可

例如这就表示开启了严格模式:

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

3、常用场景

不支持对not null字段插入null值
不支持对自增长字段插入”值
不支持text字段有默认值

:在mysql 5.7中,是默认开启严格模式的。我们自己做本地的项目的时候,可以不开启,但是如果是做线上的项目,建议还是开启严格模式会比较好。

四、设置数据库字段的默认值

emmmmm,回归到我本来的问题,设置数据库的默认值:

1、单个字段

//alter table 数据表 modify `字段名` 字段类型 DEFAULT 默认值;
alter table 数据表 modify `字段名` VARCHAR (255) DEFAULT null;

2、同一个表的多个字段

//同一个表可以同时设置多个字段的默认值,用逗号(,)隔开即可
alter table 数据表名 modify `name` VARCHAR (255) DEFAULT null,modify `type` INT (11) DEFAULT 0,modify `company_id` INT (11) DEFAULT 0,
modify `region_id` INT (11) DEFAULT 0,modify `farm_id` INT (11) DEFAULT 0;

end

mysql给字段设置默认值,以及mysql的严格模式相关推荐

  1. c mysql 的默认值_为mysql表字段设置默认值的方法及注意细节

    为mysql表字段设置默认值的方法及注意细节,有需要的朋友可以参考下. 环境:MySQL 5.1 + 命令行工具 问题:MySQL表字段设置默认值 解决方法: 代码如下: --SQL: CREATE ...

  2. jpa mysql timestamp_Java JPA设置默认值、Timestamp设置、自动获取时间

    设置默认值 @Column(name="state",columnDefinition="tinyint default 0") private Integer ...

  3. MySQL修改字段的默认值和空值

    MySQL修改字段的默认值和空值 一.修改字段默认值 修改: ALTER TABLE 表名 ALTER COLUMN 字段名 SET DEFAULT 默认值 删除: ALTER TABLE 表名 AL ...

  4. PowerDesigner中如何给字符串字段设置默认值 .

    参考:http://www.cnblogs.com/navy235/archive/2011/10/18/2216443.html 在PowerDesigner12.5中,给varchar或nvarc ...

  5. mysql修改字段的默认值

    若本身存在默认值,则先删除 alter table表名alter column字段名drop default; 然后设置默认值(若本身不存在则可以直接设定) alter table表名 alter c ...

  6. 通过sql给数据库字段设置默认值

    # 添加新字段 并设置默认值 alter table `user_tb` add column `user_name` varchar(20) not null DEFAULT '默认值';# 修改原 ...

  7. 数据库字段设置默认值

    1.UPDATE 表名  set  字段名= '默认值' WHERE 字段名is null 如:UPDATE item set  status= '0' WHERE status is null

  8. mysql为datetime类型的字段设置默认值current_timestamp,引发 Invalid default value for 错误...

    [起因] 在本地数据库执行测试平台数据库结构文件data_struct.sql,执行建表语句类似如下: CREATE TABLE `demo` (`id` int(10) unsigned NOT N ...

  9. mysql增加字段设默认值_mysql原表增加字段且设置默认值及修改字段默认值

    -- 增加字段及注释 alter table sr_zjff_main add zjbzjxbj int(1) DEFAULT '0' COMMENT ''; alter table sr_main_ ...

最新文章

  1. 使用Android BindingAdapter与InverseBindingAdapter实现SeekBar双向(正向/反向)数据绑定...
  2. 编程一万小时是种什么样的体验?
  3. 及上一篇linux安装mysql的说明
  4. python 文件 IO 操作
  5. Ubuntu下一个好用的终端
  6. Sleuth则是用来共方便的集成Zipkin。
  7. 【项目管理】外包和采购
  8. linux驱动编写(usb host驱动入门)
  9. Snabbt.js – 极简的 JavaScript 动画库
  10. 环洋市场调研-2021年全球Camlock联轴器行业调研及趋势分析报告
  11. Elasticsearch 聚合搜索技术深入
  12. 数字IC后端需要学习什么?需要具备哪些技能?
  13. Openwrt编译进阶-修改ROOT密码,修改默认WiFi名称,修改主机名,修改主机型号
  14. 网络安全课程设计Java实现DES加密算法(可视化界面)代码+设计文档
  15. 计算机教师结构化方式面试,市计算机:17名学生通过全国教师资格证结构化面试...
  16. Python代码使用easyocr识别身份证号码
  17. 货场RFID智能称重管理系统
  18. 蛋白组学ITRAQ、TMT技术
  19. 易游网吧无盘服务器安装,易游无盘安装教程
  20. 维盟服务器系统,10.198.1.1维盟服务器系统登录?

热门文章

  1. Tensor for ‘out‘ is on CPU, Tensor for argument #1 ‘self‘ is on CPU
  2. RandLA-Net测试
  3. Windows 无法启动 NVIDIA Display Container LS 服务
  4. attribute 'downsample' of type 'NoneType' is not usable in a script method
  5. libtorch demo
  6. H5Stream播放RTSP流视频
  7. qcolor文字生成颜色
  8. 使用python中的socket实现服务器和客户端,并完成图片的传输
  9. C++学习笔记-----用位运算实现加减乘除
  10. C++ 创建单级、多级目录