我很少使用负数(个人财务除外),所以也许这就是为什么我的知识存在差距......
在SO(How to achieve default value if column value is NULL?)中对其他用户提出的问题的回复提示时,请考虑以下内容:
-- Mysql Version 5.5.16
-- sql_mode = ''
DROP TABLE prices;
CREATE TABLE prices (price_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,price INT SIGNED NOT NULL DEFAULT -1);
INSERT INTO prices (price) VALUES (' '),(''),(NULL);
INSERT INTO prices (price_id) VALUES (NULL);
SELECT * FROM prices;
Expected output:
+----------+-------+
| price_id | price |
+----------+-------+
| 1 | -1 |
| 2 | -1 |
| 3 | -1 |
| 4 | -1 |
+----------+-------+
Actual output:
+----------+-------+
| price_id | price |
+----------+-------+
| 1 | 0 |
| 2 | 0 |
| 3 | 0 |
| 4 | -1 |
+----------+-------+
为什么?
中级答案:简而言之,似乎如果你想确保插入默认值(当没有设置sql_mode时), 要么忽略INSERT 中的列,要么明确地插入一个DEFAULT值,即:INSERT INTO prices (price) VALUES(DEFAULT);
对我而言,这违背了DEFAULT值的精神!?!?
答案 0 :(得分:1)
似乎:
a。)如果为非空数字字段(不是自动增量)提供NULL值,则默认值为零。
b。)如果你没有提供一个值(如在最后一行),你使用给定的默认值(-1)
http://dev.mysql.com/doc/refman/5.0/en/data-type-defaults.html
答案 1 :(得分:1)
如果您使用Mysql STRICT MODE,则结果可能会有所不同。
目前您提供的值为NULL
,服务器会尝试将此值映射到最接近的INT值。服务器未使用默认值-1,因为它将NULL作为有效值。