赞
踩
今晚正准备给网站加SEO,没想到在新增字段的时候竟然报错了:
我感到很莫名其妙,我明明是新增keywords为什么报日期默认格式不对,于是查下资料网上说是数据库模式设置不对。
关于MySQL数据库的模式官网这样解释:
MySQL服务器可以在不同的SQL模式下运行,并且可以根据SQL_mode系统变量的值,为不同的客户机应用不同的模式。DBA可以将全局SQL模式设置为与站点服务器操作要求匹配,每个应用程序都可以将其会话SQL模式设置为自己的要求。
模式会影响MySQL支持的SQL语法,并且会执行数据验证检查。这使得在不同的环境中使用MySQL以及与其他数据库服务器一起使用MySQL变得更加容易。
其中,NO_ZERO_DATE、NO_ZERO_DATE模式解释如下:
NO_ZERO_DATE:在严格模式,不要将 ‘0000-00-00’做为合法日期。你仍然可以用 IGNORE选项插入零日期。在非严格模式,可以接受该日期,但会生成警告。
NO_ZERO_IN_DATE:在严格模式,不接受月或日部分为0的日期。如果使用IGNORE选项,我们为类似的日期插入’0000-00-00’。在非严格模式,可以接受该日期,但会生成警告。
于是查一下我的数据库版本和默认模式:
明显高于5.7.8版本、默认模式包含NO_ZERO_DATE、NO_ZERO_IN_DATE,所以操作数据库的时候会执行相关校验,这就是为什么我新增varchar字段却报日期字段默认值无效的原因。为了能添加这两个字段我先把这两种模式去掉:
我勒个去NO_ZERO_DATE、NO_ZERO_IN_DATE两种模式后还是不行,本能的想到很多问题可以通过重启重装来解决,重启后执行:
神奇了,竟然可以了,其实清缓存重新连接数据库就可以了。
另外,连接数据库转化为对象出错的解决办法为在数据库连接后面加上参数zeroDateTimeBehavior=convertToNull 这样如果碰到 ‘0000-00-00:00:00:00’的日期类型时,将会转化为null值:
db.jdbcurl=jdbc:mysql://192.168.1.4:3306/db?characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull
数据连接的参数会影响着服务器到数据库数据的行为,更多的参数说明可以查看官网说明文档
另外这篇文章有讲解更新到5.7以后会遇到的一些问题和解决方案:
历史上的今天:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。