欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

杂谈:使用Mysql时可能不被注意的小细节

程序员文章站 2024-02-28 13:12:28
...

导语

最近笔者在学习写一个小项目,开发过程比较顺利,但也会出现一些小bug。尤其是在使用数据库时,如果不注意处理一些细节问题,在开发过程中就有可能频繁地跳出bug。因此,今天就对这几个小问题写一个汇总式的杂谈。

注:笔者使用的Mysql 版本为5.7。如果是更高的版本,可能又会有新的差异(尤其是Mysql 8.0以上的版本)。因此,请大家多多留心。

---------------------以下为正文内容------------------------

1. TIMESTAMP 默认值为零的错误

错误内容如下:

1067 – Invalid default value for ‘comment_date’

这个异常会出现在数据库创建表的过程中,当在给拥有TIMESTAMP属性字段中添加带0的日期或者null的日期时就会报出此错误。

出现问题的原因:sql_mode设置值的问题,具体设置值大家可以参考这篇文章:sql_mode合理设置.

解决方案:修改sqlmode中的设置值

方案一:以管理员身份打开数据库配置文件: “my.cnf”,找到 [mysqlId] 中的sql_mode字段后,删除 “NO_ZERO_DATE”,“NO_ZERO_IN_DATE” 两个参数,再重启mysql服务即可。

方案二:在终端(Windows系统为cmd,Mac或Linux系统为Terminal)中,使用命令行登录数据库,之后添加如下两行代码,之后退出再连接mysql即可:

mysql-> set global;
mysql-> sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

2. 建表时忽略字符编码设置,导致中文不可用

首先在此提醒:强烈建议大家在创建数据表时,一定在最后加上utf-8编码设置,否则将无法添加中文值。(图片中的最后一行)
杂谈:使用Mysql时可能不被注意的小细节

如果忘记添加,可以通过以下方法解决:

在Navicat等工具中,右键选择“表格设置”,之后把需要中文的字段添加utf-8编码即可:
杂谈:使用Mysql时可能不被注意的小细节
杂谈:使用Mysql时可能不被注意的小细节

3. 零值日期导致Java代码查询时出错

具体错误见图:
杂谈:使用Mysql时可能不被注意的小细节问题原因:mysql中的date类型数值范围是1000-01-01 00:00:009999-12-31 23:59:59,而0000-00-00 00:00:00不在范围内,因而报出异常。

解决方案:修改jdbc连接代码
在jdbc的连接代码中,在后面添加以下内容即可:

&zeroDateTimeBehavior=convertToNull

完整的连接代码为:

url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull

以此,jdbc会把把零值日期转换为NULL,问题得以解决。

至此,本篇杂谈所说的三个问题就结束了。各位伙伴如果还遇到别的值得注意的mysql相关问题,可以在评论区中留言。

相关标签: mysql java