1 前言
在java开发中,最常用的数据存储就是数据库,其中常用的就是mysql,关于数据库的连接配置信息,可能就不是那么的清除了,这里做一个配置信息的说明。
2 数据库连接配置信息
jdbc:mysql://localhost:3306/database_name?serverTimezone=Asia/Shanghai&useUnicode=true&
characterEncoding=utf8&useSSL=false&tinyInt1isBit=true&allowMultiQueries=true&
rewriteBatchedStatements=true&useAffectedRows=true&defaultFetchSize=10000&
zeroDateTimeBehavior=convertToNull
3 配置信息说明
1、serverTimezone=Asia/Shanghai,即时区设置,上海时间即东八区,高版本的mysql需要设置为 GMT%2B8(GMT+8)
2、useUnicode=true 使用unicode 编码
3、characterEncoding=utf8 数据库连接字符集
4、useSSL=false 是否使用 ssl
5、tinyInt1isBit=true 转换为 tinyint(1) 转换为 boolean ,否则为 int
6、allowMultiQueries=true 是否允许多行查询,在批量更新数据时,update 语句使用分号(;)进行连接,此时则需要配置运行多行查询。
7、rewriteBatchedStatements=true 批处理时需要设置该参数,在mysql5.1.13以上版本才能使用,对 update/insert/delete 都可以生效。数据量大时,消耗时间 jdbc batch < mybatis batch < foreach 循环。
8、useAffectedRows=true,默认为false。是否使用影响行数,默认为找的所有修改行数,即false。在update 的情况下,更新3条,如果只有两条有变化,则返回2(useAffectedRows=true),否则返回3.
9、defaultFetchSize=10000 默认获取条数
10、zeroDateTimeBehavior=convertToNull 默认时间转换为null,避免转换报错。0000-00-00 时间转换为 null
4 数据库sql
# 正常的插入数据
insert into table_name
# 如果数据存在则忽略,否则进行插入
insert ignore into table_name
# 如果数据存在则更新
insert into table_name (id,name) values(1,'小明') ON DUPLICATE KEY UPDATE id = 1,name = "xiaoming"
# 如果存在则替换
replace into table_name
# mysql 还有计算功能
select 1 + 4 # 计算结果为 5
# ifnull 如果字段为空则赋默认值为 0
select ifnull(age,0) from table_name
# 正则查询 user_no 不包含 数字
SELECT * FROM table_name WHERE user_no REGEXP '[^0-9]'
# 时间处理
select
DATE_FORMAT(create_time, '%Y%m%d %T'), -- 20210204 12:00:00
id,
DATE_FORMAT(create_time, '%Y%m%d%H') as time_str, -- 2021020412
DATE_FORMAT(create_time, '%Y%m%d') as day_str, -- 20210204
DATE_FORMAT(create_time, '%H') as hour_str, -- 12
WEEKDAY(create_time) as week_str -- 0-6,分别是 周一到周日
from
table_name