我在mysql中使用类似name varchar(20) NOT NULL
的语法。在这里有很大的困惑。
通常是否意味着此字段是强制性的?
但是当我在这个字段中存储空格时,它接受它。它是正确的。插入时我说'".$_POST['name']."'
。即使名称没有任何值,也会执行查询。
任何人都能澄清一下吗?
是NULL并且空格是否相同?
答案 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是缺少价值 - 未知。一个空格,甚至是一个空字符串,仍然是一个字符串。