在mysql中,NULL默认为空字符串吗?

mze*_*ler 5 mysql sql

我的字段不允许NULL值,这很奇怪。如果我插入一行,则该字段默认为空字符串,即使mysql声称默认值为NULL。

mysql> describe user;
+---------------------------+------------------+------+-----+---------+----------------+
| Field                     | Type             | Null | Key | Default | Extra          |
+---------------------------+------------------+------+-----+---------+----------------+
| id                        | int(30)          | NO   | PRI | NULL    | auto_increment |
| username                  | varchar(45)      | NO   | UNI | NULL    |                |
| city                      | varchar(45)      | NO   |     | NULL    |                |
+---------------------------+------------------+------+-----+---------+----------------+

mysql> show triggers;
Empty set (0.00 sec)

mysql> insert into user (username) values ('just_testing');
Query OK, 1 row affected, 17 warnings (0.01 sec)
Run Code Online (Sandbox Code Playgroud)

这就是我要去的地方?!-城市应默认为NULL,这是不允许的,但请查看此处:

mysql> select username, city from user where username = 'just_testing' and city is null;
Empty set (0.00 sec)

mysql> select username, city from user where username = 'just_testing' and city='';
+--------------+------+
| username     | city |
+--------------+------+
| just_testing |      |
+--------------+------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

Mysql已决定使用空字符串作为默认字符串,即使不是这样,也没有任何触发器。

并进一步:

mysql> insert into user (username, city) values ('just_testing3', NULL);
ERROR 1048 (23000): Column 'city' cannot be null
Run Code Online (Sandbox Code Playgroud)

我在俯视什么?“城市”列如何默认为“”?

Qua*_*noi 5

文档

如果您不是在严格的SQL模式下运行,则任何未明确指定值的列都将设置为其默认值(显式或隐式)。例如,如果您指定的列列表未命名表中的所有列,则未命名的列将设置为其默认值。第11.6节“数据类型默认值”中介绍了默认值分配。另请参见第1.8.3.3节“对无效数据的约束”。

进一步

对于除以外ENUM的其他字符串类型,默认值为空字符串。对于ENUM,默认值为第一个枚举值。