【问题标题】:What is the default value for a field if no default value is provided?如果没有提供默认值,字段的默认值是多少?
【发布时间】:2012-01-23 09:38:54
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: mysql phpmyadmin default-value


    【解决方案1】:

    参考manual

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

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

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

    隐式默认值定义如下:

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

    【讨论】:

      【解决方案2】:

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

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

      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
      )
      

      【讨论】:

        【解决方案3】:

        如果你想禁止 null :-

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

        上述查询将禁止 null 并在未提供值时分配一个空字符串。
        在 phpmysqladmin 中,blank = empty.
        通过 PHP mysqli functionmysql 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 表示缺少值(未知)并且与空值相同。
        • @Elliot Chance 抱歉,这是一篇旧帖子,但对我来说很有趣 - 这不是一个好主意,不允许 NULL,以这种方式选择或以这种方式更新,不是迂腐,但我真的想了解 - 谢谢
        猜你喜欢
        • 2017-11-21
        • 2012-09-25
        • 2018-03-19
        • 2014-11-09
        • 2015-07-07
        • 2019-11-22
        • 2018-07-29
        • 2018-07-09
        • 2018-07-14
        相关资源
        最近更新 更多