mysql - 升级后字符串不假定为空默认值

Posted

技术标签:

【中文标题】mysql - 升级后字符串不假定为空默认值【英文标题】:mysql - String not assuming empty default after upgrade 【发布时间】:2016-12-21 11:38:37 【问题描述】:

我最近更新了我的 mysql(并 wamp 到 v3)并将我的旧数据库移到那里。

以前,如果没有给出值,varchar、char、text 等字段类型将假定默认值为空字符串(即使我在创建表结构时没有明确设置此默认值)。

但更新后,当我尝试运行我以前工作的代码时,它给了我异常

字段<field_name> 没有默认值

我猜这是 mysql 中的设置或其他东西。谁能帮帮我?

谢谢。

【问题讨论】:

我认为您应用了not null 选项对吗? 是的。但不是空字符串字段以前默认为空字符串。 是的,这只是一个配置 MYSQL 5.7 在这方面做了一些重大的改变。您最好花点时间查看Changes Affecting Upgrades to MySQL 5.7 【参考方案1】:

原来严格模式已启用。

通过换行禁用严格模式

sql-mode="STRICT_ALL_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ZERO_DATE,NO_ZERO_IN_DATE,NO_AUTO_CREATE_USER"

sql-mode=""

参考:https://support.kayako.com/article/472-how-do-i-disable-mysql-strict-mode-on-the-server

【讨论】:

要使用 SQL 进行配置,请使用 mysql -u root -p -e "SELECT @@GLOBAL.sql_mode;" 获取设置并使用 mysql -u root -p -e "SET GLOBAL sql_mode = 'yourmodifiedsettingshere';" 进行设置。

以上是关于mysql - 升级后字符串不假定为空默认值的主要内容,如果未能解决你的问题,请参考以下文章

mysql数据库里面的NULL属性是啥意思?

是否可以将“text/javascript”假定为 <script> 元素的事实上的默认值?

添加具有空字符串作为默认值且非空约束的列会导致 oracle 数据库的行为不一致

php中的mysql数据库的,字段默认值该怎么输入,啥格式?

BIRT交叉报表中出现空值设置为默认值

Mysql---完整性约束