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

问题描述 投票:2回答:2

我在phpmyadmin中创建了一个表,其中没有空值设置值,但是当我使用插入查询插入数据时,它仍然采用空值。 怎么解决这个?

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' ) 

它在表中没有显示错误的价值。

sql database database-design phpmyadmin
2个回答
0
投票

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

如果运行此查询,显式将非空列设置为null,则会返回错误:

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

请参阅Data Type Default Values的MySql 5.0参考:

从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列的隐式默认值是空字符串,因此这是使用的。如果您希望它返回错误,请打开字符串模式。


0
投票

INSERT声明是真正的INSERT使用的吗?你创建的表是exmp.student。 INSERT使用student(不使用exmp架构)。

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

© www.soinside.com 2019 - 2024. All rights reserved.