【发布时间】:2012-01-23 09:38:54
【问题描述】:
我希望这不是一个愚蠢的问题。您可以在插入时为所有变量或函数设置默认值。但是如果不需要插入该字段并且您不允许空值,那么您在 phpMyAdmin 中看到的“空白”值是什么?在查询中它是否以空字符串等形式返回?
只是想弄清楚,我想查询所有记录,以使该记录中特定列的值不是“空”或空白或其他。
谢谢。
【问题讨论】:
标签: mysql phpmyadmin default-value
我希望这不是一个愚蠢的问题。您可以在插入时为所有变量或函数设置默认值。但是如果不需要插入该字段并且您不允许空值,那么您在 phpMyAdmin 中看到的“空白”值是什么?在查询中它是否以空字符串等形式返回?
只是想弄清楚,我想查询所有记录,以使该记录中特定列的值不是“空”或空白或其他。
谢谢。
【问题讨论】:
标签: mysql phpmyadmin default-value
参考manual,
对于没有显式 DEFAULT 的 NOT NULL 列的数据输入 子句,如果 INSERT 或 REPLACE 语句不包含 列,或 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
)
最好将所有列声明为“非空”,并酌情提供默认约束。
在上面的“书籍”示例中,如果您“插入”而不指定 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
)
【讨论】:
如果你想禁止 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
但是,最好在执行更改之前执行此操作:-
update YOUR_TABLE set COLUMN = ""
where COLUMN is null;
【讨论】:
NULL 表示缺少值(未知)并且不与空值相同。