mysql中的NULL记录和空值有什么区别

2 02 2 年,我遇到了一个令人头疼的项目。
数据库中有一个字段的值为 NULL。
起初我认为 NULL 并不重要。
然而,当我用PHP获取它时,我发现NULL和空字符串完全不同。
PHP 会将 NULL 视为特殊值。
然后我就很困惑,以为我在某个地方写错了逻辑。

后来查资料才知道NULL是MySQL中的一个特殊值。
这意味着该字段没有值,但在诸如 2 AND NULL 之类的布尔运算中,结果仍然是 NULL。
该 NULL 不会在逻辑运算中求值,因此它不代表特定值。

我记得尝试 2 AND '' 结果是一个空字符串,这真的让我感到惊讶,因为我认为空字符串也应该是 NULL。
结果后来我意识到,PHP在处理此类情况时,会出现空字符串“空”的情况,并且NULL会出现为特殊值,或者在某些情况下会出现错误。

因此,在编程的时候,需要特别注意数据库中存储字段的具体情况,尤其是这个特殊的值。
如果我记得的话,以后可能就不会再出现这样的问题了。
在这个问题上我其实是有点极端的,但现在回想起来还是觉得有点害怕。

mysql ifnull能判断空串么

不幸的是,当谈到MySQL的IFNULL函数时,它非常简单,但有时会让人头疼。
例如,如果你用它来替换NULL值就没有问题。
您编写 IFNULL(expr1 ,expr2 ),如果 expr1 为 NULL,它会为您替换 expr2
但是问题来了,如果expr1 是空字符串怎么办?在 MySQL 中,这个空字符串不在双引号 '' 之间。
它看不到 IFNULL,它只识别 NULL。

当时我很困惑。
当时为什么没有想到空字符串问题呢?直到后来我才意识到我必须找到另一种方法来处理空字符串。

例如,您可以使用 ISNULL(),但这只能识别 NULL 而不能识别空字符串。
该怎么办?你必须自己想出办法,将 IF() 与 LENGTH() 结合使用,或者直接使用 '' 。

例如,您可以说:
sql SELECT IF(用户名 IS NULL OR 用户名 = '', '未知', 用户名) ASproperty_check FROM 用户;
这里,在 IF() 函数中,首先检查用户名是否为 NULL 或空字符串。
如果是,则返回“未知”,否则返回原始用户名。

还有 CASE WHEN 更灵活。
你可以写:
sql SELECT CASE WHEN username IS NULL OR username = '' THEN 'default_value' ELSE username ENDS AS 结果;
另一个例子是 COALESCE(),它与 IFNULL 类似,但它可以接受多个参数,并且必须小心空字符串。

然后我发现 IF() 或 CASE WHEN 是一个很好的方法,既直接又方便。

嘿,简而言之,IFNULL 仅用于此目的,不要指望它能够处理空字符串。
要处理空字符串,你必须找到另一种方法,例如使用 LENGTH() 或直接使用 '' 。