猿博园

记录生活及工作中的点点滴滴

0%

一、前言

在项目开发中会经常遇到,在插入数据库时,当不存在时就新增此条数据,当存在则更新本条数据。最近项目中也遇到了此类问题,在MySQL主要提供了两种方式,现将使用方式,及却别记录一下,加强记忆。

二、示例表结构

1
2
3
4
5
6
7
8
9
10
11
12
13
-- 创建表结构
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT, -- 自增主键
`number` varchar(3) NOT NULL, -- 唯一索引
`data` varchar(64) DEFAULT NULL,
`ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
UNIQUE KEY `number` (`number`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入一条数据
INSERT INTO `test` ( `number`, `data`, `ts`) VALUES ('123', 'Old', '2020-05-06 11:09:11');
阅读全文 »

一、概述

最近在做项目时发现,在无论在java应用中使用 java.util.Date还是使用 java.time.LocalDateTime类,获取的当前时间保存到数据库中后,数据库中的时间跟应用中获取的时间相差 8个小时。

二、排查过程

首先查看数据库和java应用的时区设置,发现时区都没为题,都为东八区。困惑了好久 再一次配置 数据库连接池时发现,配置的JDBC连接路径中多了 “serverTimezone=UTC”,参数,去除此参数后重启再次保存时间 java应用和数据库中的时间一致了。

阅读全文 »