我在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' )
它将值带入表中而没有显示错误。
答案 0 :(得分:0)
INSERT
语句是真实的INSERT
使用的吗?您创建的表格为exmp.student
。 INSERT正在使用student
(不使用exmp
架构)。
可能还有另一个允许NULL
值的学生表吗?
答案 1 :(得分:0)
运行插入查询时,它会为user_name
和branch
列插入空字符串。我能够复制这个。
如果运行此查询,显式将非空列设置为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
列的隐式默认值是空字符串,因此使用的是。如果您希望它返回错误,请打开字符串模式。