mysql - 可空列的行为不一样

标签 mysql sql select null mariadb

我有一个表actor,其中有一个可为空的列first_name。我将特定行设置为空:

update actor set first_name=null where actor_id=201;
Query OK, 1 rows affected, 1 warning (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 1

然后,我尝试使用 where 子句中的空值来查询该表,但什么也没得到:

select * from actor where first_name is null;
Empty set (0.00 sec)

但是如果我选择检查该列是否为空字符串,我会得到正确的值:

select * from actor where first_name = '';
[...]
1 row in set (0.00 sec)

存储引擎是MyISAM。为什么空列被设置为空字符串?

更新

我看到 1 个警告,但 mysql CLI 没有显示任何警告。我怎样才能让它这样做?

另外:

desc actor;
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| Field       | Type                 | Null | Key | Default           | Extra                       |
+-------------+----------------------+------+-----+-------------------+-----------------------------+
| actor_id    | smallint(5) unsigned | NO   | PRI | NULL              | auto_increment              |
| first_name  | varchar(45)          | NO   |     | NULL              |                             |
| last_name   | varchar(45)          | NO   | MUL | NULL              |                             |
| last_update | timestamp            | NO   |     | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP |
+-------------+----------------------+------+-----+-------------------+-----------------------------+

最佳答案

从表描述来看,包括first_name在内的所有列都不为空。您确定它是可以为空的列吗?

关于mysql - 可空列的行为不一样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44415005/

相关文章:

mysql - 没有来自第二个表的结果的内连接

php - 使用 PHP 将 Blob 从 MySQL 数据库下载为其原始格式

php - 如何使用 foreach PHP 列出类别和子类别中的值

sql - SQLite中ANY关键字的替代

MySQL 根据共同关系从多个表中选择

jquery - 选择一个没有设置背景的元素

mysql - 如何PHP在MYSQL中爆炸并返回一个数组?

sql - Postgres - 检查数组是否包含预期值以外的值

sql - 使用 rowids 将百万行从一个表更新到另一个 Oracle

sql - MariaDB - 我可以手动添加 id 到 SELECT FROM() 吗?