【问题标题】:MySQL (mariadb) strange VARCHAR WHERE NULL behaviour [duplicate]MySQL(mariadb)奇怪的VARCHAR WHERE NULL行为[重复]
【发布时间】:2013-07-22 11:51:45
【问题描述】:

我有一张这样的桌子:

id    name (varchar)
--------------------------
1     test
2     some
3     NULL
4     test

当我查询时

SELECT * FROM table WHERE name != 'some';

我得到了结果:

id    name
--------------------------
1     test
4     test

为什么它不返回带有name == NULL 的行?

服务器版本:5.5.31-MariaDB-1~squeeze-log - mariadb.org 二进制分发(协议版本 10)

客户端版本:libmysql - 5.1.66 (mysqli) Protokoll 版本:10

【问题讨论】:

    标签: mysql mariadb


    【解决方案1】:

    因为与NULL 比较会得到UNKNOWN。您必须使用IS 运算符。

    SELECT * FROM table
    WHERE name != 'some' 
    OR    name IS NULL
    

    【讨论】:

      【解决方案2】:

      对于NULL,您需要使用WHERE name IS NULL,而不是使用== 等价

      您可以在 MySQL 文档 (3.3.4.6. Working with NULL Values) 中找到更多详细信息

      在 stackoverflow 中搜索“MySQL NULL”会产生许多相同的问题

      【讨论】:

        【解决方案3】:

        因为NULL 不等同于Empty StringNULL 根本不存在或未知,而 Empty String 存在但长度为零。如果要搜索包括NULL。那么你可以在条件中指定它。

        SELECT * FROM table WHERE name != 'some' OR name IS NULL
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-01-29
          • 1970-01-01
          • 2018-10-04
          • 1970-01-01
          • 2016-06-24
          • 1970-01-01
          相关资源
          最近更新 更多