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

时间:2013-02-20 09:34:33

标签: sql database database-design phpmyadmin

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

它将值带入表中而没有显示错误。

2 个答案:

答案 0 :(得分:0)

INSERT语句是真实的INSERT使用的吗?您创建的表格为exmp.student。 INSERT正在使用student(不使用exmp架构)。

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

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