Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да поправя кодовете за грешки на MySQL 8:1525 и 1292?

По-малкото зло е вероятно да промените SQL режима за цялата сесия както за скрипта за миграция, така и за засегнатото приложение — това трябва да е проста еднократна промяна (стига кодът на връзката да не е копиран+поставен на сто места). Режимът, който позволява невалидни дати, е ALLOW_INVALID_DATES :

SET @@SESSION.sql_mode = CONCAT_WS(',', @@SESSION.sql_mode, 'ALLOW_INVALID_DATES');

Пълна демо :

mysql> CREATE TABLE foo (bar DATE);
Query OK, 0 rows affected (0.03 sec)

mysql> SELECT @@SESSION.sql_mode;
+--------------------------------------------+
| @@SESSION.sql_mode                         |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION |
+--------------------------------------------+
1 row in set (0.00 sec)

mysql> INSERT INTO foo (bar) VALUES ('2019-02-30');
ERROR 1292 (22007): Incorrect date value: '2019-02-30' for column 'bar' at row 1
mysql> SET @@SESSION.sql_mode = CONCAT_WS(',', @@SESSION.sql_mode, 'ALLOW_INVALID_DATES');
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> INSERT INTO foo (bar) VALUES ('2019-02-30');
Query OK, 1 row affected (0.00 sec)

mysql> SELECT * FROM foo;
+------------+
| bar        |
+------------+
| 2019-02-30 |
+------------+
1 row in set (0.00 sec)


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете първия и последния ред с данни от резултат от mysql?

  2. Как да получите броя на засегнатите редове, докато изпълнявате MySQL заявка от bash?

  3. Задаване СЕГА() като стойност по подразбиране за тип данни за дата и час?

  4. mysql concat_ws без дубликати

  5. EF6 с MySQL. Посоченият ключ не присъстваше в речника