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 - 升级后字符串不假定为空默认值的主要内容,如果未能解决你的问题,请参考以下文章
是否可以将“text/javascript”假定为 <script> 元素的事实上的默认值?
添加具有空字符串作为默认值且非空约束的列会导致 oracle 数据库的行为不一致