在开发我的主板软件时,我被告知MySQL 5.1.36有关文本字段和默认值的问题。注册新用户时会发生这种情况,这是安装后首先完成的事情。
在其他各种事物中,users表具有定义为“TEXT NOT NULL”的签名字段。注册时,INSERT查询的字段列表中未指定此字段。在我运行MySQL 5.1.30的本地测试/开发服务器上,这很好用。在我运行MySQL 5.0.91的实时服务器上,这也有效。但是后来这个测试人员向我说,它不能在运行5.1.36的他的测试服务器上运行,错误消息抱怨查询必须指定一个默认值。
这里有很多TEXT字段。我最初的计划是检测MySQL 5.1.36并让安装程序拒绝运行,但前提是该行为是5.1.36独有的。 .37或更高版本是否也这样做?我错过了什么吗?
答案 0 :(得分:7)
此行为 不 是5.1.36独有的。实际上我认为现在假设MySQL版本与此问题相关还为时过早。
我建议您检查正在使用的SQL_MODE:
select @@SQL_MODE;
如果SQL_MODE为空,那么我希望在您列出的所有版本中插入成功(带警告)。
如果SQL_MODE更严格,例如TRADITIONAL
或STRICT_ALL_TABLES
,那么我希望您列出的所有版本中的插入都会失败,并显示错误:ERROR 1364 (HY000): Field 'your_field' doesn't have a default value
可能的修复:
1)更改列以显式允许NULL值:
ALTER TABLE your_table MODIFY COLUMN your_column TEXT NULL;
2)强制SQL_MODE为''。最好的方法是在my.cnf中设置它并重新启动mysql,但你也可以在MySQL提示符下设置它进行测试:
SET SESSION SQL_MODE = '';
答案 1 :(得分:2)
您是否只能更改所有文字列以允许NULL
? Mysql不允许您为text / blob列指定DEFAULT
。