我不确定这是否与Laravel相关,但我使用Laravel创建了表。我有一个名为programmers
的表
DESC programmers;
+--------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| name | varchar(255) | NO | | NULL | |
| age | int(11) | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| framework_id | int(10) unsigned | NO | | NULL | |
| test | tinyint(1) | NO | | NULL | |
+--------------+---------------------+------+-----+---------+----------------+
正如您所看到的,有一个名为test
的列不可为空,它的默认值为空。
INSERT INTO programmers (name, age, framework_id) VALUES ('Melly2', 19, 2)
它实际上运行良好,这是数据
SELECT * FROM programmers;
+----+--------+-----+---------------------+---------------------+--------------+------+
| id | name | age | created_at | updated_at | framework_id | test |
+----+--------+-----+---------------------+---------------------+--------------+------+
| 1 | melly | 20 | 2022-05-03 16:36:12 | 2022-05-03 16:36:12 | 1 | 0 |
| 2 | Melly2 | 19 | NULL | NULL | 2 | 0 |
+----+--------+-----+---------------------+---------------------+--------------+------+
test
列实际上默认为0
,而不是null
,如果我运行以下命令,它会告诉我不能按预期将null作为值
INSERT INTO programmers (name, age, framework_id, test) VALUES ('Melly2', 19, 3, null);
ERROR 1048 (23000): Column 'test' cannot be null
问:有人能简要解释一下为什么test
列没有默认为null
吗?
1条答案
按热度按时间cclgggtu1#
在这种情况下,只有在不提供值的情况下,默认值才是
null
。但是,当您提供某个值时,它应该与您为列设置的数据类型兼容。这里的数据类型是
tinyint
。所以,你应该提供true/false的值,实际上这些值将被转换为1/0;否则,您应该插入整数,例如:0,1,2,...等等。