如果没有提供默认值,那么字段的默认值是多少?

问题描述:

我希望这不是一个愚蠢的问题。您可以为所有变量设置默认值,也可以为插入时的函数设置默认值。但是如果该字段不需要插入并且您不允许空值,那么您在phpMyAdmin中看到的“空白”值是什么?在查询中是否返回空字符串等?如果没有提供默认值,那么字段的默认值是多少?

只是试图找出它,我想要查询所有记录,使该记录中的特定列的值不是“空”或空白或任何。

谢谢。

谈到manual

对于没有明确的NOT NULL列的数据输入DEFAULT 条款,如果插入或替换的语句包含了 列中没有值,或UPDATE语句设置列到NULL,MySQL的根据在时生效的SQL模式处理 柱:

  • 如果严格SQL模式未启用,MySQL将列设置为列数据类型的隐式默认值。
  • 如果启用了严格模式,则事务表发生错误,语句将回滚。对于非事务性表,会发生一个
    错误,但如果这种情况发生在多行语句的第二行或后续行 上,则会插入前面的行。

所以,你现在的问题可能是,什么是不同的列数据类型的隐含默认值?在这里你去:

  • 对于数字类型,默认为0,与同AUTO_INCREMENT
    属性声明为整数或浮点数类型的异常:

    隐性违约定义如下,默认值是序列中的下一个值。

  • 对于TIMESTAMP以外的日期和时间类型,默认值为该类型的相应“零”值。对于表中的第一个TIMESTAMP列 ,默认值是当前日期和时间。请参见第10.3节“日期和时间类型”。
  • 对于ENUM以外的字符串类型,默认值为空字符串。对于ENUM,默认值是第一个枚举值。

没有默认值,除非您指定一个值(即除非您为该列定义“默认约束”)。

下面是对现有列添加默认的例子:

ALTER TABLE dbo.customer ALTER COLUMN contactname SET DEFAULT 'Unknown' 

下面是一个例子使用默认的创建表:

CREATE TABLE Books (
    ID SMALLINT NOT NULL, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

这是很好的做法,申报所有列“不为空“,并酌情提供默认约束。

在上面的“books”示例中,如果您“插入”而未指定PubID,则PubID将为零。

在同一个例子中,如果你在没有指定ID或名字的情况下“插入”,你会得到一个错误。

如果你想让MySQL自动分配一个ID,用这个语法来代替:

CREATE TABLE Books (
    ID SMALLINT NOT NULL AUTO_INCREMENT, 
    Name VARCHAR(40) NOT NULL, 
    PubID SMALLINT NOT NULL DEFAULT 0 
) 

如果你想禁止空: -

alter table YOUR_TABLE modify column COLUMN varchar(255) not null default ''; 

上面的查询将不允许空和分配未提供值时为空字符串。
在phpmysqladmin,blank = empty
Via PHP mysqli function or mysql functionnull value is returned as null still。

一旦你申请的查询,您可以轻松地通过使用

select ... from YOUR_TABLE 
where COLUMN != "";  <-- no need to check is null 
          <-- because the first query already enforce not null 

然而筛选,是最适合你这样做之前执行ALTER: -

update YOUR_TABLE set COLUMN = "" 
where COLUMN is null; 
+2

这不是明智的做法。 “NULL”表示缺少值(未知),并且**不与空值相同。 – 2015-02-25 05:59:40