2

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

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

4

2 回答 2

0

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

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

于 2013-02-20T10:44:09.133 回答
0

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

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

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

有关数据类型默认值,请参阅 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是空字符串,所以这就是所使用的。如果您希望它返回错误,请打开字符串模式。

于 2013-02-20T10:50:32.743 回答