【问题标题】:MySQL upgrade 5.5 to 5.6 created issueMySQL 升级 5.5 到 5.6 创建问题
【发布时间】:2013-11-21 09:05:00
【问题描述】:

我猜以前,我错误地设置了我的数据库,说该列不为空,并且没有默认值。 (我认为,从未注意)。

现在更新到 mysql 5.6 后,我的很多列都说它不是 null 并且它没有默认值,当我尝试插入类似的东西时

值 1 2 3(但不是 4)到第 1 2 3 列

它失败并给我一个错误,因为第 4 列没有设置为 null,也没有默认值。 mysql中有设置绕过这个吗?

我从 5.5 迁移到 5.6

在 cent os 6 , php 5.4

只是困惑为什么数据库以前可以工作,而不是现在,我所做的只是导出数据库并再次导入。

【问题讨论】:

  • 查看mysql更新日志或说明;他们通常会识别新版本中发生的变化;我敢肯定,新版本收紧了一些宽松的限制。
  • 您可以做的一件事是发出 alter 语句来更新特定的表/列以设置默认值。
  • 是的,我想这就是我最终不得不做的。我相信他们收紧了限制。真是个苦差事.. 只是为了从 innodb 获取全文搜索呵呵..
  • 不是真的; MySQL 5.6 上的 InnoDB 现在支持 fulltext search
  • 我的意思是,我升级到 5.6 并完成了所有这些工作,因为我想得到它 :) 无论如何,感谢您的帮助。

标签: mysql linux


【解决方案1】:

找到答案: http://dev.mysql.com/doc/refman/5.6/en/upgrading-from-previous-series.html

从 MySQL 5.6.13 开始,服务器应用适当的 sql_mode 检查以在插入或更新时生成警告或错误。

如果您使用基于语句的日志记录 (binlog_format=STATEMENT) 导致的复制不兼容是,如果升级了从属服务器,未升级的主服务器将执行前面的示例而不会出错,而从属服务器上的 INSERT 将失败,并且复制将停下来。

要解决这个问题,请停止主服务器上的所有新语句并等待从服务器赶上。然后升级slave,然后升级master。或者,如果您无法停止新语句,请暂时更改为在主服务器上基于行的日志记录(binlog_format=ROW),并等待所有从服务器处理所有生成的二进制日志,直到此更改为止。然后升级从属服务器,然后升级主服务器,并将主服务器改回基于语句的日志记录。


经过进一步调查,关闭mysql严格模式在my.cnf文件中起作用。

【讨论】:

    【解决方案2】:

    CTRL + ALT + T(终端)

    sudo apt-get remove --purge mysql-server mysql-client mysql-common
    sudo apt-get autoremove
    sudo apt-get autoclean
    sudo /etc/init.d/apache2 reload
    sudo apt-get install phpMySql
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-08
      • 2012-11-22
      • 2013-07-29
      • 2014-03-20
      • 2018-07-13
      • 2017-01-07
      • 2012-03-06
      相关资源
      最近更新 更多