Nice Rik!

On Thu, Sep 8, 2011 at 3:19 PM, Rik Wasmus <r...@grib.nl> wrote:

> > I fired the update statement in a wrong way ..like this ..
> >
> > update user_info set login_date='2011-08-05 04:15:05' and user_id
> =16078845
> > limit 1 ;
> > ( I forgot to use where . instead of where I used and )
> > update user_info set login_date='2011-08-05 04:15:05' where user_id
> > =16078845 limit 1 ; ( this is the query intended )
> >
> > after the update ..I got this message ..
> > mysql> update user_info set login_date='2011-08-05 04:15:05' and user_id
> > =16078845 limit 1;
> > Query OK, 1 row affected, 1 warning (0.02 sec)
> > Rows matched: 1  Changed: 1  Warnings: 0
> >
> > It shows that one record is affected and one row changed ..
> > I did show warnings ..the output is like this ..
> >
> > | Warning | 1292 | Truncated incorrect DOUBLE value: '2011-08-05
> 04:15:05'
>
> > So my question is what happened exactly ?
> > Why no records updated ?
>
> A lot of casting:
>
> (1) login_date='2011-08-05 04:15:05' and user_id =16078845;
>
> And implies boolean, so the result is the either true or false. MySQL
> doesn't
> like using non-numbers as booleans (the '2011-08-05 04:15:05') , this is
> the
> double spoken of.
>
> (2) login_date = false (or true, but that doesn't matter)
>
> But MySQL doesn't know booleans, to a number it is:
>
> (3) login_date = 0
>
> But the column is a DATETIME (or TIMESTAMP) column, 0 or 1 is an incorrect
> value, cast to:
>
> (4) login_date = 0000-00-00 00:00:00
>
> So, somewhere there's (or was, may be overwritten) a record with that
> value,
> just 1 due to the limit 1, otherwise, the whole table would have that as a
> login_date (doesn't matter wether it was true or false).
>
>
> Check out:
> DB 5.1.58-1-log:(none)  mysql> SELECT 1 AND 1;
> +---------+
> | 1 AND 1 |
> +---------+
> |       1 |
> +---------+
> 1 row in set (0.00 sec)
>
> DB 5.1.58-1-log:(none)  mysql> SELECT 0 AND 1;
> +---------+
> | 0 AND 1 |
> +---------+
> |       0 |
> +---------+
> 1 row in set (0.01 sec)
>
> DB 5.1.58-1-log:(none)  mysql> SELECT '1' AND 1;
> +-----------+
> | '1' AND 1 |
> +-----------+
> |         1 |
> +-----------+
> 1 row in set (0.03 sec)
>
> DB 5.1.58-1-log:(none)  mysql> SELECT 'a' AND 1;
> +-----------+
> | 'a' AND 1 |
> +-----------+
> |         0 |
> +-----------+
> 1 row in set, 1 warning (0.03 sec)
>
> DB 5.1.58-1-log:(none)  mysql> SHOW WARNINGS;
> +---------+------+---------------------------------------+
> | Level   | Code | Message                               |
> +---------+------+---------------------------------------+
> | Warning | 1292 | Truncated incorrect DOUBLE value: 'a' |
> +---------+------+---------------------------------------+
> 1 row in set (0.01 sec)
> --
> Rik Wasmus
>
> --
> MySQL General Mailing List
> For list archives: http://lists.mysql.com/mysql
> To unsubscribe:
> http://lists.mysql.com/mysql?unsub=sureshkumar...@gmail.com
>
>


-- 
Thanks
Suresh Kuna
MySQL DBA

Reply via email to