MySQL中NULL与空值的区别

昨天在工作时,出现一个问题:数据库中建表某个字段规定为NOT NULL的,但是插入的相应字段的字符串为""时候,直接插入数据库中,而没有禁止插入。

在网上查了一下,发现在MySQL中,NULL(空)与 ""意义并不相同:

  • StackOverFlow.com上相关问题 “MySQL, better to insert NULL or empty string?” 高票答案:

    使用NULL可以区分“没有输入数据”和“输入空数据”, 差异在于:

    • NULL的长度就是NULL,空字符串的长度为0
    • 一串NULL数据比空字符串优先排序
    • COUNT(message)会将空字符串计数进去,但是不会将NULL数据们计入
    • 可以使用绑定变量搜索某个空字符串,但是不可以这样搜索NULL,例如:

      SELECT *
      FROM mytable
      WHERE mytext = ?

      mytext永远不可能匹配NULL值,无论你从客户端如何传值。匹配NULL的方法只能这样查询:

      SELECT *
      FROM mytable
      WHERE mytext IS NULL
  • MySQL Manual (5.0版本)

    • 测试NULL需要用IS NULL或者IS NOT NULL=, <>, <, >等与NULL的计算比较,结果仍然为NULL
    • MySQL中,0NULL表示假,任何其他的值表示真。默认布尔操作的真值为1
    • GROUP BY操作中,两个NULL被认为是相等的;并且NULL值在ORDER BY ... ASC中第一个显示,而在DESC中则是最后一个
      +
Tech Note
MySQL
数据库
Database