数据库中开启非严格模式,插入数据时,不插入非空字段,在navicat中执行语句没有问题;在java中执行相同的语句却出现如下错误。
error
java.sql.SQLException:Field ‘status’ does not have a default value
数据库设置
- status在数据库存中设置not null,并且没有默认值。
- sql_mode=’’;
设置 sql_mode
查看当前连接会话的sql模式:
mysql> select @@session.sql_mode;
或者从环境变量里取
mysql> show variables like “sql_mode”;
查看全局sql_mode设置:
mysql> select @@global.sql_mode;
只设置global,需要重新连接进来才会生效
Set sessionVariables
尝试设置sessionVariables,修改sql-mode属性,结果还是相同的问题。
|
|
mysql-connector-java-.jar
经排查,驱动包会默认加上STRICT_TRANS_TABLES,导致java中无法开启非严格模式。
类:
com.mysql.jdbc.ConnectionImpl.java
以下是设置方法:
解决
后面妥协了,给数据库字段加默认值。
其它
sql_mode=STRICT_TRANS_TABLES
设置它,表示启用严格模式。