如何使表格不在phpmyadmin的非空集字段中取空值?

Posted

技术标签:

【中文标题】如何使表格不在phpmyadmin的非空集字段中取空值?【英文标题】:How to make table not to take null values in not null set field in phpmyadmin? 【发布时间】:2013-02-05 06:06:30 【问题描述】:

我在 phpmyadmin 中创建了 1 个表,设置值不为空,但当我使用插入查询插入数据时,它仍然采用空值。 如何解决这个问题?

用于创建表的sql:

CREATE TABLE exmp.student ( id INT( 12 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,   
name VARCHAR( 200 ) NOT NULL ,  
 user_name VARCHAR( 200 ) NOT NULL ,  
 branch VARCHAR( 200 ) NOT NULL )

插入查询:

INSERT INTO exmp.student( name ) VALUES ( 'harjeet' ) 

它正在将值放入表中,但未显示错误。

【问题讨论】:

【参考方案1】:

当您运行插入查询时,它会为user_namebranch 列插入空字符串。我能够复制它。

如果你运行这个查询,明确地将非空列设置为空,那么它将返回一个错误:

INSERT INTO student( name, user_name, branch ) VALUES ( 'harjeet', null, null ) 

请参阅 mysql 5.0 参考以获取 Data Type Default Values:

从 MySQL 5.0.2 开始,如果列定义不包含显式 DEFAULT 值,MySQL 将按如下方式确定默认值:

如果列可以将 NULL 作为值,则使用显式 DEFAULT NULL 子句定义该列。这和5.0.2之前的一样。

如果列不能以 NULL 作为值,MySQL 会在没有显式 DEFAULT 子句的情况下定义该列。 例外:如果该列被定义为 PRIMARY KEY 的一部分但未显式定义为 NOT NULL, MySQL 将其创建为 NOT NULL 列(因为 PRIMARY KEY 列必须为 NOT NULL),但也使用隐式默认值为其分配一个 DEFAULT 子句。为防止这种情况,请在任何 PRIMARY KEY 列的定义中包含显式 NOT NULL。

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

如果启用了严格的 SQL 模式,则事务表会发生错误并回滚语句。对于非事务性表,会发生错误,但如果多行语句的第二行或后续行发生这种情况,则会插入前面的行。

如果未启用严格模式,MySQL 会将列设置为列数据类型的隐式默认值。

所以看起来你的 MySql 没有启用严格模式。 varchar 列的隐式默认值是空字符串,所以这就是所使用的。如果你希望它返回错误,那么打开字符串模式。

【讨论】:

【参考方案2】:

INSERT 语句是真正使用的INSERT 吗?您创建的表是exmp.student。 INSERT 使用student(不使用exmp 模式)。

可能还有另一个学生表允许NULL 值?

【讨论】:

以上是关于如何使表格不在phpmyadmin的非空集字段中取空值?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql从php脚本插入空白字段,但不在phpmyadmin中?

HTML 表格 - 如何使 IE 不在连字符处换行

如果字段不在模式中,如何使猫鼬失败?

phpMyAdmin 在表格视图中将 varchar 字段显示为单独的十六进制值

如何让 PHPMyAdmin 显示 MySQL 警告?

将 Excel 电子表格导入 phpMyAdmin