0.jdbc.pro perties配置数据库连接池
druid写username,有的连接池写user 注意区分
1.Java向MySQL中插入时间少一天的问题
根本原因:高版本MySQL在后台连接数据库的时候 jdbc.properties文件中的配置与老版本不一样
mysql5:Url=mysqlurl=jdbc:mysql://localhost:3306/mybatis
mysql8:url=jdbc:<mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai>
日期或者是:serverTimezone=GMT%2B8
mysql8 连接参数之前是 serverTimezone=UTC ,所以插入时间的时候总是少8个小时,改时区为serverTimezone=Asia/Shanghai
2.Java数据到MySQL中文乱码
还有可能导致MyBatisPlus中向数据库查不到数据,或者中文变成“?”的问题。
jdbc.url=jdbc:mysql://localhost:3306/user_db?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true
其中:
- characterEncoding —> 设置编码
- serverTimezone —> 时区
- rewriteBatchedStatements —> 批处理
3.idea内置Database细节
- 先配置Drivers的MySQL for 5.1加jar包
- 配置Project Data Sources URL需要加时区参数
4.mysql8查询日期使用BETWEEN超出查不到
- 出现问题的语句
SELECT * FROM t WHERE orderDate BETWEEN '2021-09-01' AND '2021-09-31'
- 使用模糊查询
select * from t where oDate like '2021-09-%'
5. docker安装mysql时区错误
测试环境mysql5.7
如果安装时没有配置时区,则默认为UTC,与中国标准时间相差8小时
6.MySQL中gmt_create和gmt_modified字段
可以在MySQL层面自动填充,也可以java层面用mp自动填充,前提是不换数据库,一直用MySQL
7.统一返回的json时间格式
因为默认情况下json时间格式带有时区,并且是(UTC)世界标准时间,和我们的时间差了八个小时
在application.yml中设置
spring:
#返回json的全局时间格式
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
实体类时间设置参考
//不使用json格式传输数据时 客户端请求日期格式
@DateTimeFormat(pattern = "yyyy-MM-dd")
//使用json格式传输数据时 请求响应日期的格式
@JsonFormat(pattern = "yyyy-MM-dd")
在某些情况下 二者若格式不同 前端发请求传日期数据时可能会冲突
8.通过查询对象查询实体类的时间可以用string
9.视图无法打开
原因是mysql的root权限不足
授权命令:grant all privileges on . to root@”%” identified by “.”;
10、关于范围查找索引失效的问题
2022-01-13
朋友今天发现一个问题,如下图。
其中,id为主键自增,name创建索引,age没有。
首先分析,范围查询右边的条件索引失效,所以LIKE不予考虑。
总数据9条时,查询范围是3条记录,索引有效。此时命中率为1/3,0.333~,小于这个数都有效。
若4/9,0.44~,索引失效!
当总记录13条,查询出4条记录时索引失效。此时命中率约为4/13,0.3077~
查询3条则有效。
结论:1、当查询出来的数据过多(具体多少暂时未知,也可能跟key_len或其他参数有关),SQL优化器认为走全表效率更高。2、当查询范围内数据少时,SQL才会走索引查询。3、但是也可以FORCE index(索引名)强制使用索引。
11、 SQLyog连接本地MySQL报错:2508
原因:MySQL密码加密方式不允许本地访问
CMD进入mysql:
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘password’;
其中password是预设置的root密码 。