Преобразование предупреждения MySQL в ошибку - PullRequest
3 голосов
/ 19 мая 2011

Есть ли способ преобразовать предупреждение, которое MySQL выдает о недопустимом datetime, в серьезную ошибку?Я пытался использовать SET sql_mode='TRADITIONAL';, который, по-видимому, должен превращать (некоторые) вещи, которые являются предупреждениями, в ошибки, но это не имеет никакого эффекта.Это MySQL 5.1.56.То, что работает на уровне сеанса, было бы идеально, но я возьму то, что смогу получить.

mysql> describe test_table2;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| value    | int(11)     | YES  |     | NULL    |       |
| name     | varchar(16) | YES  |     | NULL    |       |
| sometime | datetime    | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> select * from test_table2;
+-------+-------+---------------------+
| value | name  | sometime            |
+-------+-------+---------------------+
|     1 | one   | 2002-09-01 10:00:00 |
|     2 | two   | 2002-09-02 11:00:00 |
|     3 | three | 2002-09-03 12:00:00 |
|     4 | four  | 2002-01-04 13:00:00 |
|     5 | five  | 2002-01-05 14:00:00 |
+-------+-------+---------------------+
5 rows in set (0.00 sec)

mysql> select * from test_table2 where sometime = 'foo';
Empty set, 2 warnings (0.00 sec)

Warning (Code 1292): Incorrect datetime value: 'foo' for column 'sometime' at row 1
Warning (Code 1292): Incorrect datetime value: 'foo' for column 'sometime' at row 1

Ответы [ 2 ]

2 голосов
/ 25 января 2012

При SET sql_mode='TRADITIONAL' выполнение INSERT с недопустимой датой приводит к ошибке, но выполнение SELECT с недопустимой датой по-прежнему вызывает предупреждение. Вы можете вызвать ошибку, передав сначала (возможно, неверное) значение даты этому запросу:

CREATE TEMPORARY TABLE IF NOT EXISTS date_guard (date DATE) SELECT 'foo' AS date;

где 'foo' - значение даты, которое вы хотите проверить.

1 голос
/ 14 июня 2011

Кто должен увидеть ошибку?

Если это фиксированная строка 'foo', просто попробуйте преобразовать 'foo' в дату и посмотрите, можете ли вы получить правильный результат (т.е. не 00-00-000). Выполните предварительный запрос, чтобы проверить правильность даты, а затем продолжите после.

Мне не удалось заставить MySQL выдавать ошибку в этом случае (или даже преобразовать недопустимую дату в NULL - она ​​настаивает на том, чтобы она была 00-00-0000).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...