in reply to working with year in mysql

Even if I allow null values and replace all the NV instances with ""(nothing), I still get zero in that cell.

I suspect that this isn't doing what you think it is. Where MySql is concerened, "" is not the same as NULL.

Consider the following example:

mysql> create table foo (Year year(2) default null); Query OK, 0 rows affected (0.06 sec) mysql> insert into foo values (""); Query OK, 1 row affected (0.00 sec) mysql> select * from foo; +------+ | Year | +------+ | 00 | +------+ 1 row in set (0.00 sec) mysql> insert into foo values (NULL); Query OK, 1 row affected (0.01 sec) mysql> select * from foo; +------+ | Year | +------+ | 00 | | NULL | +------+ 2 rows in set (0.01 sec)

If you want to represent your NV values with NULL, then you need to explicity specify NULL when you insert. (If you are using placeholders, then I think an undef value will evaluate to NULL, but you'd have to check that).

Update: Actually (and before somebody jumps on me), that statement above isn't quite true. eg:

mysql> insert into foo values (); Query OK, 1 row affected (0.00 sec) mysql> select * from foo; +------+ | Year | +------+ | 00 | | NULL | | NULL | +------+
Of course, because NULL is the default - if you just insert without giving anything at all - you'll get NULL :)

Hope this helps,
Darren :)

Replies are listed 'Best First'.
Re^2: working with year in mysql
by bart (Canon) on Dec 16, 2005 at 08:46 UTC
    If you are using placeholders, then I think an undef value will evaluate to NULL, but you'd have to check that
    Yep, it does. And that's what he should use.