Mysql 字段';文本';不';没有默认值

Mysql 字段';文本';不';没有默认值,mysql,mysql-error-1364,Mysql,Mysql Error 1364,我有一个运行在数百个网站上的系统,这是我第一次遇到错误。我希望有人能告诉我是什么原因导致了这个错误,这样我就可以试着消除它 尝试添加页面时会出现问题 INSERT INTO pages (parent, name, type, sort) VALUES ('0', 'test', 'text', '37.5'); 这会导致以下错误 [nativecode=1364 ** Field 'text' doesn't have a default value] #1101 - BLOB/TEXT

我有一个运行在数百个网站上的系统,这是我第一次遇到错误。我希望有人能告诉我是什么原因导致了这个错误,这样我就可以试着消除它

尝试添加页面时会出现问题

INSERT INTO pages (parent, name, type, sort) VALUES ('0', 'test', 'text', '37.5');
这会导致以下错误

[nativecode=1364 ** Field 'text' doesn't have a default value]
#1101 - BLOB/TEXT column 'text' can't have a default value 
我认为这可能是基于代码的,所以我上传了phpMyAdmin,错误仍然存在

有一个名为
TEXT
的文本字段。这没有默认值,但是它从来都不需要。到目前为止,它在没有一台的情况下运行良好

当我试图在这台服务器上设置默认字段时,我得到了以下错误

[nativecode=1364 ** Field 'text' doesn't have a default value]
#1101 - BLOB/TEXT column 'text' can't have a default value 
基本上,问题是——发生了什么

MySQLi与MySQL不同吗?这可能是原因吗

我的服务器运行mysql 5.0.5,这个服务器运行mysql 5.0.51a。我能确信这不是原因吗


是否有人对这一问题的原因有任何想法甚至猜测?

如果名为“text”的字段不可为空,则如果没有默认值,则必须在其中插入一个值。我不知道为什么这两个版本在行为上有差异。MySQLi只是在更高版本的MySQL上运行的MySQL驱动程序的版本(我想>=4.1,但我不记得很确定)。

如果要插入的表中有
text
字段,并且不能为空,则需要设置其值。如果不这样做,将为其设置默认值,并且正如您所看到的,没有默认值。尝试使用反勾号转义保留字,并为其插入一个值,如下所示:

INSERT INTO pages (parent, name, type, sort, `text`) VALUES ('0', 'test', 'text', '37.5', '');

我意识到这是一个老问题,但我有一个类似的问题,通过谷歌发现了这个问题,但没有答案,所以如果其他人也这样做,我的解决方案如下:

在我的例子中,我试图在本地机器上运行一个购物车,并且不断出现问题中提到的数据库错误。我使用的是MySQL 5.5.12,结果发现我选择的购物车中的php是为较旧的MySQL版本编写的,这会不断显示错误和不稳定性。我不会建议你是否有类似的降级问题,幸运的是这不是必要的

这里需要的是禁用MySQL严格模式,这会导致兼容性问题。为此,您只需通过phpMyAdmin/SQLyog(或所选接口)运行以下查询:

只是为了澄清这是两个单引号(')

有关更多信息或其他禁用MySQL严格模式的方法,请参阅本网站:

在调试旧版应用程序时遇到了同样的问题,可以通过进入我的MySQL配置文件(mac上的my.cnf,但如果是这样的话,windows上的my.ini)并注释掉文件底部的sql\u mode=NO\u ENGINE\u替换、STRICT\u TRANS\u TABLES行来解决。一旦完成此操作,请重新启动mysql,以使更改生效。

我不知道发生了什么,但我认为将
文本
列重命名为其他列将是一个好主意,作为第一个措施:以保留字命名列是不明智的。我理解这一点,但这在数百台服务器上运行良好。我不明白为什么这是不同的。机制、查询和其他一切都是相同的。在“坏”服务器上执行“显示创建表页面”,并与“好”服务器进行比较。这将给出重新创建这两个表所需的确切DDL,您可以查找差异。