如果没有提供默认值,那么字段的默认值是多少?
我希望这不是一个愚蠢的问题。您可以为所有变量设置默认值,也可以为插入时的函数设置默认值。但是如果该字段不需要插入并且您不允许空值,那么您在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 function,null 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;
这不是明智的做法。 “NULL”表示缺少值(未知),并且**不与空值相同。 – 2015-02-25 05:59:40