mysql数据库默认时间格式_详解Mysql数据库date,datetime类型设置

mysql数据默认时间格式_详解Mysql数据库date,datetime类
设置000。。。
新农村文化建设论文现象:MySQL5.7版本之后,date, datetime类型设置默认值"0000-00-00",出现异常:Invalid default value for 'time'
原因:在命令⾏窗⼝查看当前的sql_mode配置:
select @@sql_mode;
结果如下:
ONLY_FULL_GROUP_BY, STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, and NO_ENGINE_SUBSTITUTION
其中NO_ZERO_IN_DATE, NO_ZERO_DATE两个选项禁⽌了0000这样的⽇期和时间。因此在mysql的配置⽂件中,重新设置
sql_mode,去掉这两项就可以了。
解决办法
1.windows系统下:
使⽤ SET [SESSION|GLOBAL] sql_mode='modes'
注意:SESSION(默认选项):表⽰当前回话中⽣效;GLOBAL(需重启):表⽰全局⽣效
也可以修改my.ini配置⽂件
***
cnf演⽰:
SET GLOBAL sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
1.Linux系统下:
修改myf⽂件,在[mysqld]中添加
sql-
mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_
修改完成⼀定重启MySQL
2.Mac系统下:
在MacOS中默认是没有myf ⽂件,如果需要对MySql 进⾏定制,拷贝/usr/local/mysql/support-files/⽬录 中任意⼀个f ⽂件。
笔者拷贝的是my-defaultf,将它放到其他⽬录,按照上⾯修改完毕之后,更名为myf,然后拷贝到/etc⽬录再重启下mysql就⼤功
告成了。
sql_mode模式问题拓展
sql_mode 常⽤值说明
1.SQL语法⽀持类
ONLY_FULL_GROUP_BY
对于GROUP BY聚合操作,如果在SELECT中的列、HAVING或者ORDER BY⼦句的列,没有在GROUP BY中出现,那么这个SQL是不
合法的。是可以理解的,因为不在 group by 的列查出来展⽰会有⽭盾。 在5.7中默认启⽤,所以在实施5.6升级到5.7的过程需要注意:
ANSI_QUOTES
启⽤ ANSI_QUOTES 后,不能⽤双引号来引⽤字符串,因为它被解释为识别符,作⽤与 ` ⼀样。
设置它以后,update t set f1="" ...,会报 Unknown column ‘' in ‘field list 这样的语法错误。
PIPES_AS_CONCAT
将 || 视为字符串的连接操作符⽽⾮运算符,这和Oracle数据库是⼀样的,也和字符串的拼接函数 CON
CAT() 相类似
NO_TABLE_OPTIONS
使⽤ SHOW CREATE TABLE 时不会输出mysql特有的语法部分,如 ENGINE ,这个在使⽤ mysqldump 跨DB种类迁移的时候需要考虑
NO_AUTO_CREATE_USER
字⾯意思不⾃动创建⽤户。在给MySQL⽤户授权时,我们习惯使⽤ GRANT ... ON ... TO dbuser顺道⼀起创建⽤户。设置该选项后就与oracle操作类似,授权之前必须先建⽴⽤户。5.7.7开始也默认了。
2.数据检查类
NO_ZERO_DATE女生我最大
认为⽇期 ‘0000-00-00' ⾮法,与是否设置后⾯的严格模式有关。 1.如果设置了严格模式,则 NO_ZERO_DATE ⾃然满⾜。但如果是INSERT IGNORE 或 UPDATE IGNORE,'0000-00-00'依然允许且只显⽰warning 2.如果在⾮严格模式下,设置了NO_ZERO_DATE,效果与上⾯⼀样,'0000-00-00'允许但显⽰warning;如果没有设置NO_ZERO_DATE,no warning,当做完全合法的值。
3.NO_ZERO_IN_DATE情况与上⾯类似,不同的是控制⽇期和天,是否可为 0 ,即 2010-01-00 是否合法。
NO_ENGINE_SUBSTITUTION
使⽤ ALTER TABLE或CREATE TABLE 指定 ENGINE 时, 需要的存储引擎被禁⽤或未编译,该如何处理。启⽤
NO_ENGINE_SUBSTITUTION时,那么直接抛出错误;不设置此值时,CREATE⽤默认的存储引擎替代,ATLER不进⾏更改,并抛出⼀个 warning。
STRICT_TRANS_TABLES
袁大炳
设置它,表⽰启⽤严格模式。
注意 STRICT_TRANS_TABLES 不是⼏种策略的组合,单独指 INSERT、UPDATE出现少值或⽆效值该如何处理: 把 ‘' 传给int,严格模式下⾮法,若启⽤⾮严格模式则变成0,产⽣⼀个warning
Out Of Range,变成插⼊最⼤边界值
A value is missing when a new row to be inserted does not contain a value for a non-NULL column that has no explicit DEFAULT clause in its definition
mysql5.0以上版本⽀持三种sql_mode模式: set @@sql_mode=xxx模式名;
我们常设置的 sql_mode 是 ANSI、STRICT_TRANS_TABLES、TRADITIONAL,其中ANSI和TRADITIONAL是上⾯的⼏种组合。
3.ANSI模式:宽松模式,对插⼊数据进⾏校验,如果不符合定义类型或者长度,对数据类型调整或截断保存,报warning警告.
高应朴4.TRADITIONAL模式:严格模式,当向MySQL数据库插⼊数据时,进⾏数据的严格校验,保证错误数据不能插⼊,报error错误.⽤于事务时,会进⾏事务的回滚.
3.STRICT_TRANS_TABLES模式:严格模式,进⾏数据的严格校验,错误数据不能插⼊,报error错误。
设备管理系统以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持脚本之家。

本文发布于:2024-09-20 15:39:06,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/718965.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:SAP 口令
下一篇:3sat问题规约
标签:模式   默认   数据   设置
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议