To get a NULL, you need it to pass an undefined value.
If $var is undefined, $var || undef
is still undefined. What is the code you are using to
do the insert, and what's the code you are using to test
the result?
I thought your question was about what happens when you want to execute a query and some of your variables are empty. This is what I get when working with DBI, DBD::mysql.
mysql> show fields from emptycols;
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| a | varchar(12) | | | | |
| b | varchar(5) | YES | | NULL | |
| c | int(11) | YES | | NULL | |
+-------+-------------+------+-----+---------+-------+
my $dbh = DBI->connect('dbi:mysql:test',$ENV{'USER'});
my $sth = $dbh->prepare("INSERT INTO emptycols VALUES (?,?,?)");
$sth->execute("apple", "red",17);
$sth->execute("apple", undef,10);
$sth->execute("orange", "ora",undef);
mysql> select * from emptycols;
+--------+------+------+
| a | b | c |
+--------+------+------+
| apple | red | 17 |
| apple | NULL | 10 |
| orange | ora | NULL |
+--------+------+------+
3 rows in set (0.00 sec)