我们在设计表的时候一般会有一个类似 create_time 的字段,这个字段设置默认值是 CURRENT_TIMESTAMP 而且不允许为空。
在 MySQL 5.5 以及更早版本的时候,当你给这个字段插入一个 NULL 空值的时候,数据库会自动使用当前时间来填充这个字段内容。
但是从 MySQL 5.6 开始,这个行为变了,当你插入一个 NULL 值,数据库会报错称此字段不允许为空。你必须在你的 INSERT 语句中去掉这个 create_time 字段,数据库才会使用当前时间去填充这个字段的值。
因此当你要升级数据库到 5.6 版本的时候,这个问题你必须考虑。
而 OSChina 的这个问题非常严重!
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
mysql是以粗制滥造来获得急速性能,在程序的完善过程中一致性、健壮性都得到提升,但代价是性能下降,程序前后(默认)行为可能不一致应该是更严谨了。有时候一些看起来好像省事的东西,未必就是真省事。没准就是留下什么玄幻的BUG。
回复<aclass='referer'target='_blank'>@红薯:这就是代价啦。实际上原本输入NULL然后被默认值代替这种写法本身就应该算BUG。太玄幻了,语法糖不能把语句的逻辑硬改呀。但是应用逻辑会很复杂
建表规范,所有字段.
不许为null,+默认值.
好 一般默认都是0000-00-0000:00:00,或者用int的时间戳。我从来没有这个问题
因为我用pg
而且我这里没有ORM
说好的不依赖数据库的具体实现。。。<divclass='ref'>