我希望这不是一个愚蠢的问题。您可以为所有变量设置默认值,也可以为插入时设置函数。但是如果不需要插入字段并且您不允许空值,那么您在phpMyAdmin中看到的“空白”值是多少?在一个查询中它是作为空字符串等返回?
只是想弄明白,我想查询所有记录,使得该记录中特定列的值不是“空”或空白或其他。
感谢。
答案 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 function或mysql function,null 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;