MySQL показывает ошибку SQL: 1048 вместо предупреждения - PullRequest
0 голосов
/ 04 июня 2018

При локальном обновлении ненулевого столбца до нулевого значения он выдаст ошибку, но при работе с экземпляром 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 обрабатывает это, но изменение значения не имеет никакого эффекта.Установка для моих локальных значений тех же значений, что и для удаленных, не воспроизводит поведение:

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

Какая настройка позволяет моему экземпляру AWS RDS отображать предупреждение, если локально это ошибка?

Дополнительная информация:

  • Определение столбца: xxxxx int (11) без знака NOT NULL
  • Механизм хранения: InnoDB
  • Локальная версия: 5.6.33-log и 5.6.27 (наблюдается проблема в двух разных областях)
  • Удаленная версия: 5.6.39-log

1 Ответ

0 голосов
/ 04 июня 2018

Либо вы можете установить SQL_MODE на «IGNORE», т. Е. Сделать это нелегко.

В качестве альтернативы вы можете использовать «INSERT IGNORE», чтобы ошибка / предупреждение игнорировалась, как показано ниже:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...