首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL文本字段默认值和版本差异

问MySQL文本字段默认值和版本差异
EN

Stack Overflow用户
提问于 2011-03-01 17:54:24
回答 2查看 3.4K关注 0票数 1

在开发我的板软件时,我被告知了MySQL 5.1.36在文本字段和默认值方面的一个问题。这发生在注册一个新用户时,这是安装后的第一件事。

users表除其他外,还有一个定义为"TEXT“的签名字段。注册时,插入查询的字段列表中没有指定此字段。在我运行MySQL 5.1.30的本地测试/开发服务器上,这很好。在我运行MySQL 5.0.91的实时服务器上,这也是可行的。但是,这个测试人员来找我说,它不能在运行5.1.36的测试服务器上工作,这个错误消息抱怨查询必须指定一个默认值。

这里有很多文本字段。我最初的计划是检测MySQL 5.1.36并让安装程序拒绝运行,但前提是该行为是5.1.36特有的。.37或更高版本也是这样吗?我是不是错过了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-03-01 18:25:30

您就不能更改所有的文本列以允许NULL吗?Mysql不允许为文本/blob列指定DEFAULT。

票数 2
EN

Stack Overflow用户

发布于 2011-03-01 18:44:09

这种行为不是5.1.36所特有的,实际上我认为认为MySQL版本与这个问题有关还为时过早。

我建议您检查使用的是哪个SQL_MODE:

代码语言:javascript
复制
select @@SQL_MODE;

如果SQL_MODE是空的,那么我希望插入在您列出的所有版本中都会成功(并发出警告)。

如果SQL_MODE更严格,如TRADITIONAL或STRICT_ALL_TABLES,那么我希望在您列出的所有版本中插入错误:ERROR 1364 (HY000): Field 'your_field' doesn't have a default value失败。

可能的解决办法:

1)更改列以显式允许空值:

代码语言:javascript
复制
ALTER TABLE your_table MODIFY COLUMN your_column TEXT NULL;

2)强制SQL_MODE为“”。最好的方法是在my.cnf中设置它并重新启动mysql,但是您也可以在MySQL提示符下设置它以进行测试:

代码语言:javascript
复制
SET SESSION SQL_MODE = '';
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5158371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档