连接
根据 mysql-connector-java 版本不同,配置的内容也有些许差异
# mysql-connector-java 6.0.x 以下版本配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/boot?useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
mysql-connector-java 6.0.x 以下版本如果要指定mysql的时区,需要添加以下参数 &useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
而在mysql-connector-java 6.0.x 及以上版本,serverTimezone参数为必填项,必须指定
# mysql-connector-java 6.0.x 及以上版本配置
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/boot?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=123456
参数说明
useUnicode=true&characterEncoding=UTF-8
useUnicode=true&characterEncoding=UTF-8表示此连接的 mysql 客户端数据为 UTF-8,mysql服务器则是任意编码,如果mysql服务器也是 UTF-8 编码,则可以不写。
假如 mysql 数据库用的是 gbk 编码,而项目用的是 utf-8 编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么
-
存数据时:会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。
-
取数据时:先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码
serverTimezone
serverTimezone=Asia/Shanghai表示此连接的 mysql 客户端的时区为Asia/Shanghai,通过此连接传输的时间的时区都为Asia/Shanghai
serverTimezone参数主要用在 mysql 客户端和 mysql 服务器在不同时区时,转换二者交互中时间数据。
例如: mysql 客户端位于中国,时区为 UTC+08:00(北京)。mysql 服务器部署在美国加州,时区为 UTC-08:00 (美国加州)。现在客户端有一条记录的创建时间是北京时区时间22:00,当数据存储到数据库时,创建时间的时区会转换成数据库对应的时区,因此数据库实际存储的创建时间为 06:00。 当 mysql 客户端读取到这条记录时,服务器根据自己的时区和客户端连接设置的时区,将存储的 06:00 转成 22:00 返回给客户端