这是我的疑问:
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
远程服务器返回一个空行。
我可以在哪里更改本地主机上的设置?
答案 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字符串。但是你必须在插入查询中提供它。
您可以为列添加默认值。 尝试将远程表导入到本地 - 这将最大限度地减少模式的未来问题。