sql laravel表中的默认值

6ovsh4lw  于 2022-11-08  发布在  其他
关注(0)|答案(1)|浏览(207)

我不确定这是否与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吗?

cclgggtu

cclgggtu1#

在这种情况下,只有在不提供值的情况下,默认值才是null。但是,当您提供某个值时,它应该与您为列设置的数据类型兼容。
这里的数据类型是tinyint。所以,你应该提供true/false的值,实际上这些值将被转换为1/0;否则,您应该插入整数,例如:0,1,2,...等等。

相关问题