0.jdbc.pro perties配置数据库连接池

druid写username,有的连接池写user 注意区分

1.Java向MySQL中插入时间少一天的问题

  1. 根本原因:高版本MySQL在后台连接数据库的时候 jdbc.properties文件中的配置与老版本不一样

mysql5:Url=mysqlurl=jdbc:mysql://localhost:3306/mybatis

  1. mysql8:url=jdbc:<mysql://localhost:3306/mybatis?useSSL=false&serverTimezone=Asia/Shanghai>
  2. 日期或者是:serverTimezone=GMT%2B8

  mysql8 连接参数之前是 serverTimezone=UTC ,所以插入时间的时候总是少8个小时,改时区为serverTimezone=Asia/Shanghai

2.Java数据到MySQL中文乱码

还有可能导致MyBatisPlus中向数据库查不到数据,或者中文变成“?”的问题。

  1. 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超出查不到

  • 出现问题的语句
  1. SELECT * FROM t WHERE orderDate BETWEEN '2021-09-01' AND '2021-09-31'
  • 使用模糊查询
  1. 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中设置

  1. spring:
  2. #返回json的全局时间格式
  3. jackson:
  4. date-format: yyyy-MM-dd HH:mm:ss
  5. time-zone: GMT+8

实体类时间设置参考

  1. //不使用json格式传输数据时 客户端请求日期格式
  2. @DateTimeFormat(pattern = "yyyy-MM-dd")
  3. //使用json格式传输数据时 请求响应日期的格式
  4. @JsonFormat(pattern = "yyyy-MM-dd")
  5. 在某些情况下 二者若格式不同 前端发请求传日期数据时可能会冲突

8.通过查询对象查询实体类的时间可以用string

传给mysql查询时mysql会转换为时间类型

9.视图无法打开

image.png
原因是mysql的root权限不足
授权命令:grant all privileges on . to root@”%” identified by “.”;

10、关于范围查找索引失效的问题

2022-01-13
朋友今天发现一个问题,如下图。
其中,id为主键自增,name创建索引,age没有。
mmexport1642074927837.png
首先分析,范围查询右边的条件索引失效,所以LIKE不予考虑。

总数据9条时,查询范围是3条记录,索引有效。此时命中率为1/3,0.333~,小于这个数都有效。
若4/9,0.44~,索引失效!
image.png
当总记录13条,查询出4条记录时索引失效。此时命中率约为4/13,0.3077~
查询3条则有效。
image.png

结论: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密码 。

12、