2013-11-09 61 views
1

我想在之前,我错误地设置了我的数据库说列不为空,并且没有默认值。 (我想,从未注意)。MySQL升级5.5到5.6创建的问题

现在更新到mysql 5.6后,很多我的专栏的说,这是不为空,它并没有默认值,当我尝试插入类似

值1 2 3(但没有4)代入塔1 2 3

它失败,因为列4未设置为空也不具有默认值给我一个错误。有没有在MySQL的设置绕过这个?

我从5.5迁移到5.6

分上OS 6,PHP 5.4

只是困惑,为什么数据库之前的工作,而不是了,我所做的只是导出数据库,并再次做了一个进口。

+0

检查MySQL的更新日志或指令;他们通常会识别新版本中发生了什么变化;我确定这是一些松散的限制,在较新的版本中收紧。 –

+0

你可以做的一件事是发出alter语句来更新特定的表/列来设置默认值。 –

+0

是的,我想这就是我最终不得不去做的。他们收紧了我相信的限制。真是烦人..只是为了从innodb heh得到全文搜索.. – Darius

回答

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将在从节点和复制会停止。

为了解决这个问题,停止在主所有新语句,并等待从机追赶。然后升级从站,然后升级主站。或者,如果无法停止新语句,则临时更改为主服务器上的基于行的日志记录(binlog_format = ROW),并等待所有从服务器处理完此次更改时生成的所有二进制日志。然后升级主站,然后将主站更改回基于语句的日志记录。


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

0

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