插入时Mysql不为空字段

时间:2014-04-29 18:27:04

标签: mysql

这是我的疑问:

INSERT INTO tabla (campo1,campo2,campo3) VALUES ('$campo1','$campo2','$campo3')

由于'tabla'有更多的列,其中一些不是null而且都没有默认值,我收到了mysql消息:“Fiel'column4'没有默认值”。

我正在我的本地服务器上运行它,在在线服务器上试用它并确实插入行没有问题。

有谁知道这是否与mysql.ini文件的某种配置或类似的东西有关?在我的数据库中有太多列,所以将列更改为“null”或将它们设置为默认值将花费大量时间。我认为它可以修复,因为它在服务器上运行良好。

感谢。

更新:

这是SQL模式。我查询了SELECT @@GLOBAL.sql_mode;

我的本​​地服务器返回:STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
远程服务器返回一个空行。

我可以在哪里更改本地主机上的设置?

3 个答案:

答案 0 :(得分:1)

如果您确定在本地和远程服务器上使用相同的模式,则可能是远程服务器的SQL模式设置与本地SQL模式不同,您可以使用以下方法之一进行检查:< / p>

SELECT @@GLOBAL.sql_mode;
SELECT @@SESSION.sql_mode;

这将重现问题:

CREATE TABLE tabla (
  campo1 VARCHAR(255) NOT NULL,
  campo2 VARCHAR(255) NOT NULL,
  campo3 VARCHAR(255) NOT NULL,
  campo4 VARCHAR(255) NOT NULL);

SET @@SESSION.sql_mode= 'STRICT_TRANS_TABLES';

INSERT INTO table (campo1, campo2, campo3) VALUES ('a', 'b', 'c');

即使campo4上有专栏费用,这也行。

CREATE TABLE tabla (
  campo1 VARCHAR(255) NOT NULL,
  campo2 VARCHAR(255) NOT NULL,
  campo3 VARCHAR(255) NOT NULL,
  campo4 VARCHAR(255) NOT NULL);

SET @@SESSION.sql_mode= '';

INSERT INTO table (campo1, campo2, campo3) VALUES ('a', 'b', 'c');

请参阅小提琴here

请在Server SQL Modes页面查看手册。

答案 1 :(得分:1)

这种奇怪的行为可能取决于&#34; sql_mode&#34;系统变量 - 它控制着大量的怪癖和设置。

因此,通过在两台服务器上运行select @@sql_mode;命令来检查模式 - 它必须输出不同的值,以便您知道本地服务器上使用的模式。

答案 2 :(得分:0)

如果列为not null,则必须在插入记录时提供其值。没有别的办法 - not null仅用于强制其中的任何数据(即使它只是EMPTY字符串。但是你必须在插入查询中提供它。

您可以为列添加默认值。 尝试将远程表导入到本地 - 这将最大限度地减少模式的未来问题。