Estou mantendo um banco de dados com tabelas InnoDB. Essas tabelas possuem algumas colunas do tipo (de show create table):
`val0` varchar(30) default NULL,
`val1` varchar(30) default NULL,
etc...
Na linha de comando do mysql, estou procurando entradas NULL nessas tabelas.
Agora selecionei algumas linhas onde val0 IS NULL AND val1 = ''
(string vazia), mas a linha de comando do mysql mostra os dois valores como
+------+------+
| val0 | val1 |
+------+------+
| NULL | NULL |
+------+------+
Aparentemente, isso está me confundindo. Esse comportamento é intencional? Existe um método para definir como strings vazias são exibidas?
EDITAR:
Devo mencionar que o STRICT MODE (consulte os documentos ) parece estar ativado.
A pergunta
SELECT * FROM table WHERE val0 IS NULL AND val1 = '';
encontra a linha acima. A pergunta
SELECT * FROM table WHERE val0 IS NULL AND val1 IS NULL;
não encontra essa linha. Ainda assim, o '' é exibido como 'NULL'. Como faço para mudar isso?
A versão do servidor é "5.0.22-log".
EDIÇÃO 2:
Aqui está o SHOW CREATE TABLE completo (anônimo) mytable:
CREATE TABLE `mytable` (
`id` int(11) NOT NULL,
`time` int(20) NOT NULL,
`val0` varchar(30) default NULL,
`val1` varchar(30) default NULL,
`val2` varchar(30) default NULL,
`val3` varchar(30) default NULL,
`val4` varchar(30) default NULL,
`val5` varchar(30) default NULL,
`val6` varchar(30) default NULL,
`val7` varchar(30) default NULL,
`val8` varchar(30) default NULL,
`val9` varchar(30) default NULL,
`status` tinyint(4) default '0',
UNIQUE KEY `idtime` (`id`,`time`),
KEY `status` (`status`),
KEY `id` (`id`),
KEY `time` (`time`),
CONSTRAINT `mytable_ibfk_1` FOREIGN KEY (`id`) REFERENCES `idtable` (`id`)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Aqui estão minhas perguntas:
select * from mytable where val1 is null limit 1;
-> sem resultado
select * from mytable where val1 = '' limit 1;
resultado:
+-----+------------+------+------+------+------+------+------+------+------+------+------+--------+
| id | time | val0 | val1 | val2 | val3 | val4 | val5 | val6 | val7 | val8 | val9 | status |
+-----+------------+------+------+------+------+------+------+------+------+------+------+--------+
| 300 | 1346855716 | 0 | NULL | 42 | 4711 | blib | blub | NULL | NULL | NULL | NULL | 5 |
+-----+------------+------+------+------+------+------+------+------+------+------+------+--------+
Curiosidade: Esses últimos quatro NULLs são na verdade a string "NULL". (Estou apenas mantendo este sistema, não o construí...)
Bug #20067 string vazia retorna NULL como valor exibido
Este bug é possivelmente corrigido 5.0.23. Veja o documento referenciado pela página acima.