在mysql中不是null用法

时间:2010-05-15 19:48:37

标签: mysql

我在mysql中使用类似name varchar(20) NOT NULL的语法。在这里有很大的困惑。

通常是否意味着此字段是强制性的?

但是当我在这个字段中存储空格时,它接受它。它是正确的。插入时我说'".$_POST['name']."'。即使名称没有任何值,也会执行查询。

任何人都能澄清一下吗?

是NULL并且空格是否相同?

6 个答案:

答案 0 :(得分:4)

NULL和一个空字符串不一样。您可以将空字符串存储在定义为NOT NULL的列中。

来自manual

  

使用NULL时常见的错误是假设无法将零或空字符串插入到定义为NOT NULL的列中,但事实并非如此。这些实际上是值,而NULL表示“没有值。”您可以使用IS [NOT] NULL轻松地测试这个,如下所示:

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+
  

因此,完全可以将零或空字符串插入NOT NULL列,因为它们实际上是NOT NULL。见B.5.5.3,Problems with NULL Values

答案 1 :(得分:2)

NOT NULL表示数据库需要输入一些值。如果您尝试插入NULL,则可以在MySQL中定义将要插入的默认值。

请记住,空格或空字符串与NULL不同。 NULL表示根本没有指定任何值,甚至不是空白。

答案 2 :(得分:2)

我不会再向你解释NULL,其他人已经这样做了。

使用PHP执行SQL时,请始终尝试使用PDO

实施例

$name = (!isset($_POST['name']) || empty($_POST['name']) ? NULL : $_POST['name'];

这就是说,如果$ _POST未设置或为空,请将$ name的值设置为NULL。否则使用$ _POST ['name']。

现在,当您在准备好的SQL语句中绑定$ name时,您将拥有严格的NULL值或名称的字符串。

答案 3 :(得分:1)

是的,这意味着必须在插入时提供该值。但是,MySQL treats empty strings and NULL differently。 (也是一件好事,IMO。)从那份文件:

  

使用NULL时出现常见错误   是假设它是不可能的   插入零或空字符串   进入一个定义为NOT NULL的列,但是   不是这种情况。这些都在   事实值,而NULL意味着“不是   有价值。“你可以测试一下   通过使用IS [NOT] NULL可以轻松实现   如图所示:

mysql> SELECT 0 IS NULL, 0 IS NOT NULL, '' IS NULL, '' IS NOT NULL;
+-----------+---------------+------------+----------------+
| 0 IS NULL | 0 IS NOT NULL | '' IS NULL | '' IS NOT NULL |
+-----------+---------------+------------+----------------+
|         0 |             1 |          0 |              1 |
+-----------+---------------+------------+----------------+
  

因此,完全可以将零或空字符串插入NOT NULL列,因为它们实际上是NOT NULL。

答案 4 :(得分:0)

NULL实际上是“NULL”而不是空格。您必须执行name=NULL之类的操作才能将字段设置为null。

答案 5 :(得分:0)

NULL是缺少价值 - 未知。一个空格,甚至是一个空字符串,仍然是一个字符串。