MySQL显示SQL错误:1048作为警告而不是错误

时间:2018-06-04 04:49:09

标签: mysql amazon-web-services

在本地将非空列更新为空值时会产生错误,但是当针对AWS RDS实例运行时,它会正常并报告警告。

例如。针对AWS RDS:

2018-05-31 15:41:23,066 [][][localhost]  WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper:232 - SQL Warning Code: 1048, SQLState: null
2018-05-31 15:41:23,068 [][][localhost]  WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper:233 - Column 'xxxxx' cannot be null

反对我的当地人:

2018-05-31 15:02:07,023 [][][localhost]  WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper:144 - SQL Error: 1048, SQLState: 23000
2018-05-31 15:02:07,024 [][][localhost] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper:146 - Column 'xxxxx' cannot be null
2018-05-31 15:02:07,029 [][][localhost]  INFO org.hibernate.engine.jdbc.batch.internal.AbstractBatchImpl:208 - HHH000010: On release of batch it still contained JDBC statements
2018-05-31 15:02:07,035 [][][localhost]  WARN net.sourceforge.stripes.exception.DefaultExceptionHandler:90 - Unhandled exception caught by the Stripes default exception handler.
org.hibernate.exception.ConstraintViolationException: could not execute statement

从我的阅读中,sql_mode属性处理此问题,但更改该值无效。将my local设置为与remote相同的值不会重现该行为:

show variables where Variable_name like '%sql_mode%';
'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION'

允许我的AWS RDS实例在本地出现错误时显示警告的设置是什么?

其他信息:

  • 列定义:xxxxx int(11)unsigned NOT NULL
  • 存储引擎:InnoDB
  • 本地版本:5.6.33-log和5.6.27(观察两个不同领域的问题)
  • 远程版本:5.6.39-log

1 个答案:

答案 0 :(得分:0)

您可以将SQL_MODE设置为" IGNORE"即不容易做到。

替代方案,您可以使用" INSERT IGNORE"以便忽略ERROR / WARNING,如下所示:

mysql> insert into x values(null);
ERROR 1048 (23000): Column 'id' cannot be null
mysql> insert ignore into x values(null);
Query OK, 1 row affected, 1 warning (0.15 sec)

mysql> select * from x;
+----+
| id |
+----+
|  0 |
+----+
1 row in set (0.00 sec)

mysql> insert ignore into x values(null);
Query OK, 1 row affected, 1 warning (0.16 sec)

mysql> select * from x;
+----+
| id |
+----+
|  0 |
|  0 |
+----+
2 rows in set (0.00 sec)