如何使表格不在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_name
和branch
列插入空字符串。我能够复制它。
如果你运行这个查询,明确地将非空列设置为空,那么它将返回一个错误:
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中?