我正在创建一个MySQL数据库,它由每周数据集组成,可以追溯到过去十年。最近的记录中存在一些数据点,但在某些较旧的数据集中未跟踪这些数据点。有问题的字段都包含整数值,'0'是跟踪数据点的记录的完全有效(和频繁)值。我需要能够区分零值和不存在的数据。因此,我需要找出是否可以为INT类型存储未表示为“0”的NULL(读取:BLANK CELL)。但是,传递给DB的NULL值表示为'0'(至少,它们在phpMyAdmin中),有没有办法改变它?
感谢您的帮助。
答案 0 :(得分:13)
您可以将值设置为NULL。 INSERT INTO table (INT_COLUMN) VALUES (NULL)
是有效的SQL(INT_COLUMN是可以为空的int列)。
答案 1 :(得分:9)
答案是“是” - 你可以拥有可以为空的int列。但是你呢?
很多时候,null
被滥用和误解。在SQL数据库中,null
表示“未知”。在你的情况下,使用null
是完美的,所以“是的 - 你应该”
在某些情况下,您希望将特定值用于“null”,例如-1
用于数量。这种方法是有效的,用于简化应用程序代码和SQL,因为在查询中处理空值是一件痛苦的事情:
WHERE NAME IN (SELECT COL1 FROM SOMETABLE)
如果任何选定的值为空则永远不会有效答案 2 :(得分:2)
是的,请确保您的表设计为允许相关列中的NULL值。请参阅下面的基本示例:
DROP TABLE IF EXISTS testTable;
CREATE TABLE `testTable` (
`id` int(11) unsigned NOT NULL auto_increment,
`data` int(11) default NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
;
INSERT INTO testTable VALUES
(NULL, 100),
(NULL, 200),
(NULL, NULL),
(NULL, 400);
SELECT * FROM testTable;
选择将具有以下结果:
+----+------+
| id | data |
+----+------+
| 1 | 100 |
| 2 | 200 |
| 3 | NULL |
| 4 | 400 |
+----+------+