MySQL INT类型可以是非零NULL

时间:2012-02-05 23:57:06

标签: mysql null int

我正在创建一个MySQL数据库,它由每周数据集组成,可以追溯到过去十年。最近的记录中存在一些数据点,但在某些较旧的数据集中未跟踪这些数据点。有问题的字段都包含整数值,'0'是跟踪数据点的记录的完全有效(和频繁)值。我需要能够区分零值和不存在的数据。因此,我需要找出是否可以为INT类型存储未表示为“0”的NULL(读取:BLANK CELL)。但是,传递给DB的NULL值表示为'0'(至少,它们在phpMyAdmin中),有没有办法改变它?

感谢您的帮助。

3 个答案:

答案 0 :(得分:13)

您可以将值设置为NULL。 INSERT INTO table (INT_COLUMN) VALUES (NULL)是有效的SQL(INT_COLUMN是可以为空的int列)。

答案 1 :(得分:9)

答案是“是” - 你可以拥有可以为空的int列。但是你呢?

很多时候,null被滥用和误解。在SQL数据库中,null表示“未知”。在你的情况下,使用null是完美的,所以“是的 - 你应该”

在某些情况下,您希望将特定值用于“null”,例如-1用于数量。这种方法是有效的,用于简化应用程序代码和SQL,因为在查询中处理空值是一件痛苦的事情:

  • 您必须使用特殊语法“IS NULL”
  • 任何包含null的列表都不会匹配任何,例如WHERE NAME IN (SELECT COL1 FROM SOMETABLE)如果任何选定的值为空则永远不会有效
  • Null不等于其他任何东西,甚至是另一个null
  • 在严格(例如java)应用程序代码中,您检查值是否为null或者您将获得NullPointerException。使用实际值可以避免这个

答案 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 |
+----+------+