导入mysql数据的时候提示Field * doesn't have a default value解决方法
- 项目使用django+mysql
- 在linux中使用的是mysql5.7,导入数据提示:Field * doesn't have a default value
- 想要解决问题就需要知道在mysql5.7中,启用了严格模式:
- 在配置文件中 /etc/mysql/my.cnf 中找到:
- sql-model=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 修改为:sql-mode=NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 然后重启mysql,在重新同步模型到数据库
出现此问题的原因:
- 在mysql5.0.2以前,mysql对非法值检查并不严厉,而且为了数据输入还会强制将他们变为合法值。
- 在5.0.2以后的版本中,保留了以前的默认行为,但你可以为不良值选择更传统的处理方法,从而使得服务器能够拒绝并放弃出现不良值的语句。
mysql 默认行为和新的严格sql模式和区别:
- 如果未使用严格模式,下面的情况是合法的。如果将不正确的值插入到列,如将null值插入非null列,或将过大的数据插入数值列,mysql 会将这些列设置为最可能的值,而不是抛出错误信息。
- 如果视图将超过范围的值保存到数值列,mysql服务器将保存0(最小的可能值)取而代之,或最大的可能值。
- 对于字符串,mysql 或保存空字符串,或将字符串可能多的部分保存到列中。
- 如果打算将不是以数值开头的字符串保存到数值列,mysql将保存0。
- mysql允许将特定的不正确日期值保存到DATE和DATETIME列(如:“2000-02-31” 或 “2000-02-00”)。其观点在于,验证日期不是sql服务器你的值。如果mysql能保存日期值并且准确检索相同的值,mysql就能按给定的值保存它。如果日期错误(超出服务器能保存的范围)将在列中保存特殊的日期值“0000-00-00”取而代之。
- 如果视图将null值保存到不接受null值的列,对于单行insert语句,将出现错误。对于多行insert语句或者insert into...select语句,mysql服务器会保存针对列数据类型的隐含默认值。一般情况下,对于数值类型,它是0,对于字符串类型,它是空字符串(‘’),对于日期和时间类型是“zero”。
- 如果insert语句未为列指定值,如果列定义包含明确的default子句,mysql将插入默认值。如果在定义中没有这类default子句,mysql 会插入列数据类型的隐含默认值。
- 采用前描述规则的原因在于,在语句开始执行前,无法检查这些情况。如果在更新了舒航后遇到这类问题,我们不能仅靠回滚解决,这是因为存储引擎可能不支持回滚。种植语句并不是良好的选择,在该情况下,更新完成了“一半”,这或许是最差的情况。对于本例,较好的方式是“尽可能做到最好”,就像什么都没有发生那样继续执行。
在mysql 5.0.2以后的版本中,可以使用STRICT_TRANS_TABLES 或 STRICT_ALL_TABLES sql模式,选择更严格的处理方式。
STRICT_TRANS_TABLES的工作方式:
- 对于事物性存储引擎,在语句中任何地方出现的不良数据值俊辉导致放弃语句并执行回滚。
- 对于非事物性存储引擎,如果错误出现再要插入或更新的第一行,将放弃语句。(这种情况下,可以认为语句未改变表,就像事物表一样)。首行后出现的错误不会导致放弃执行语句。取而代之的是,将调整不良数据值,并给出警告,而不是错误。换句话讲,使用STRICT_TRANS_TABLES后,错误值会导致mysql执行回滚操作,如果可以,所有更新到此为止。
要想执行更严格的检查,请启用STRICT_ALL_TABLES。除了非事务性存储引擎,它与STRICT_TRANS_TABLES等同,即使当不良数据出现在首行后的其他行,所产生的错误也会导致放弃执行语句。这意味着,如果错误出现在非事务性表多行插入或更新过程之中,仅更新部分结果,前面的行将完成插入或更新,但错误出现点后面行为则不然。对于非事务性表,为了避免这种情况的发生,可使用单行语句,或者在能接受转换警告而不是错误的情况下使用STRICT_TRANS_TABLES。要想在第1场合防止问题的出现,不要使用mysql来检查列的内容。最安全的方式是,让应用程序负责,仅将有效值传递给数据库。
有了严格的模式选项后,可使用insert ignore 或 update ignore 而不是不带ignore的insert或update,将错误当做警告对待。
http://www.2cto.com/database/201212/174364.html
导入mysql数据的时候提示Field * doesn't have a default value解决方法的更多相关文章
- Mysql Field * doesn't have a default value解决方法
Mysql Field * doesn't have a default value解决方法 MySQL 5中,出现错误提示: Field 'id' doesn't have a default va ...
- Sqoop导入mysql数据到Hbase
sqoop import --driver com.mysql.jdbc.Driver --connect "jdbc:mysql://11.143.18.29:3306/db_1" ...
- solr7.4创建core,导入MySQL数据,中文分词
#solr版本:7.4.0 一.新建Core 进入安装目录下得server/solr/,创建一个文件夹,如:new_core 拷贝server/solr/configsets/_default/con ...
- java.sql.SQLException: Field 'login_date' doesn't have a default value解决方法
在做web项目的insert插入操作的时候, 由于对于一个字段没有插入数据, xml文件写法如下: <insert id="savePremissUser" > ins ...
- 在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法
在使用Ajax请求返回json数据的时候IE浏览器弹出下载保存对话框的解决方法 最近在做一个小东西,使用kindeditor上传图片的时候,自己写了一个上传的方法,按照协议规则通过ajax返回json ...
- Python提示AttributeError 或者DeprecationWarning: This module was deprecated解决方法
Python提示AttributeError 或者DeprecationWarning: This module was deprecated解决方法 在使用Python的sklearn库时,发现sk ...
- VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法
VMware虚拟机提示“锁定文件失败 打不开磁盘”解决方法 摘自: http://www.xitongcheng.com/jiaocheng/xtazjc_article_40299.html 发布时 ...
- mysql You can't specify target table for update in FROM clause解决方法
mysql You can't specify target table for update in FROM clause解决方法出现这个错误的原因是不能在同一个sql语句中,先select同一个表 ...
- 如何导出和导入mysql数据(数据迁移)
. 导出数据库数据 mysqldump -uroot -p dp_db > dumpout.sql 其中 root是账户名 dp_db是需要导出的数据库名称 dumpout.sql存储导出的数据 ...
随机推荐
- java中表示二进制、八进制、十进制、十六进制
1.进制 进制是一种记数方式 ,可以用有限的数字符号代表所有的数值.由特定的数值组成. 2.进制的表现形式 二进制: 由0和1两个数字组成. 八进制: 由0-7数字组成,为了区分与其他进制的数字区别, ...
- Excel、Exchange 和 C# (摘要)
Excel.Exchange 和 C#Eric GunnersonMicrosoft Corporation 2003年4月21日 摘要:Eric Gunnerson 将向您介绍如何使用 Outloo ...
- C#实现阿拉伯数字(小写金额)到大写中文(大写金额)的转换
/// <summary> /// 本类实现阿拉伯数字到大写中文的转换 /// 该类没有对非法数字进行判别,请事先自己判断数字是否合法 /// </summary& ...
- C#模拟登录总结
/// <summary> 登录 /// </summary> /// <param name="url">< ...
- 整合springboot(app后台框架搭建四)
springboot可以说是为了适用SOA服务出现,一方面,极大的简便了配置,加速了开发速度:第二方面,也是一个嵌入式的web服务,通过jar包运行就是一个web服务: 还有提供了很多metric,i ...
- jenkins~管道Pipeline的使用,再见jenkinsUI
Pipeline在Jenkins里的作用 最近一直在使用jenkins进行自动化部署的工作,开始觉得很爽,省去了很多重复的工作,它帮助我自动拉服务器的代码,自动还原包包,自动编译项目,自动发布项目,自 ...
- mysql之ALTER COLUMN、CHANGE COLUMN、MODIFY COLUMN的区别
ALTER COLUMN:设置或删除列的默认值(操作速度非常快) 例子: alter table film alter column rental_duration set default 5; al ...
- [DFS遍历图]UVA10562 Undraw the Trees
传送门: 1. UVA - 10562 2. Vjudge [看图写树] 将题目中给出的树改写为 括号表示法 即 (ROOT (SON1(...) (SON2(...)...(SONn(... ...
- android堆栈调试--详细
1.将ndk中的arm-linux-androideabi-addr2line可执行文件的路径加入配置文件~/.bashrc中,例如: export PATH=$PATH:~/dlna/android ...
- 《java.util.concurrent 包源码阅读》04 ConcurrentMap
Java集合框架中的Map类型的数据结构是非线程安全,在多线程环境中使用时需要手动进行线程同步.因此在java.util.concurrent包中提供了一个线程安全版本的Map类型数据结构:Concu ...