MySQL中NULL与空值的区别

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

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

使用NULL可以区分“没有输入数据”和“输入空数据”, 差异在于: + NULL的长度就是NULL,空字符串的长度为0 + 一串NULL数据比空字符串优先排序 + COUNT(message)会将空字符串计数进去,但是不会将NULL数据们计入 + 可以使用绑定变量搜索某个空字符串,但是不可以这样搜索NULL,例如: SQL SELECT * FROM mytable WHERE mytext = ? mytext永远不可能匹配NULL值,无论你从客户端如何传值。匹配NULL的方法只能这样查询: SQL 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中则是最后一个

links

social