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

时间:2011-12-19 07:23:51

标签: mysql phpmyadmin default-value

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

只是想弄明白,我想查询所有记录,使得该记录中特定列的值不是“空”或空白或其他。

感谢。

3 个答案:

答案 0 :(得分:27)

参考manual

  

对于没有显式DEFAULT的NOT NULL列的数据输入   如果INSERT或REPLACE语句不包含任何值,则该子句   列,或UPDATE语句将列设置为NULL,MySQL处理   根据当时生效的SQL模式的列:

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

所以现在你的问题可能是,各种列数据类型的隐含默认值是什么?你走了:

  

隐式默认值定义如下:

     
      
  • 对于数字类型,默认值为0,但使用AUTO_INCREMENT声明的整数或浮点类型除外   属性,默认值是序列中的下一个值。
  •   
  • 对于TIMESTAMP以外的日期和时间类型,默认值为该类型的相应“零”值。对于第一个TIMESTAMP列   在表中,默认值是当前日期和时间。请参见第10.3节“日期和时间类型”。
  •   
  • 对于ENUM以外的字符串类型,默认值为空字符串。对于ENUM,默认值是第一个枚举值。
  •   

答案 1 :(得分:0)

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

以下是在现有列上添加默认值的示例:

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
)

最好将所有列声明为“not null”,并根据需要提供默认约束。

在上面的“书籍”示例中,如果您在不指定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
)

答案 2 :(得分:-1)

如果你想禁止null: -

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

上述查询将禁止null,并在未提供值时指定空字符串 在phpmysqladmin,blank = empty
通过PHP mysqli functionmysql functionnull value is returned as null仍然。

应用查询后,您可以使用

轻松过滤该查询
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;