MySQL与openGauss 时间操作比较分析

Mysql 与 openGauss 性能视图比较 与 Mysql 的 Performance_schema 类似,openGauss 本身也提供类似的性能监控视图。但与 Mysql 也存在差异,本文就针对两者异同做个比较。Mysql 的性能监控视图保存在 performance_schema schema 下,openGauss 主要保存在 dbe_perf schema 下。本人主要比较 statement,wait event 和 io 相关视图。从上面的分析可以看出 Mysql 的系统监控表与 openGauss 还是有挺大差别。 阅读详情

表创建以及数据打桩

-- mysql
CREATE TABLE `a` (
      `b_datetime` DATETIME(6) NULL DEFAULT NULL
)
COLLATE='utf8mb4_0900_ai_ci'
ENGINE=InnoDB
;

INSERT INTO a VALUES('2022-07-19 11:44:50.674000');
INSERT INTO a VALUES(NULL);

-- opengauss

CREATE TABLE b (
    b_datetime timestamp without time zone
)
WITH (orientation=row, compression=no);    
INSERT INTO b (b_datetime)VALUES (timestamp '2022-07-19  11:44:50.674000');
INSERT INTO a VALUES(NULL)


-- mysql时间字段datetime 迁移到opengauss 时间字段类型为timestamp

原始数据查询

#MySQL
select * from a;
+----------------------------+
| b_datetime                 |
+----------------------------+
| 2022-07-19 11:44:50.674000 |
| NULL                       |
+----------------------------+
2 rows in set (0.00 sec)
===============================================================
#openGauss
select * from test.a;
       b_datetime
-------------------------
2022-07-19 11:44:50.674


(2 rows)
查询结果:
mysql         时间输出  年-月-日 时:分:秒.微妙 
opengauss     时间输出  年-月-日 时:分:秒.微妙 (微妙低位0被抹除)

TO_CHAR与DATE_FORMAT 时间转换为字符串格式化

#MySQL
SELECT DATE_FORMAT(`b_datetime`, '%Y-%m-%d %H:%i:%s.%f') from `test`.`a`;
+---------------------------------------------------+
| DATE_FORMAT(`b_datetime`, '%Y-%m-%d %H:%i:%s.%f') |
+---------------------------------------------------+
| 2022-07-19 11:44:50.674000                        |
| NULL                                              |
+---------------------------------------------------+
2 rows in set (0.00 sec)
===============================================================
#openGauss
SELECT  to_char(b_datetime, 'YYYY-MM-DD HH24:MI:SS.FF') from "test"."a" ;
          to_char
----------------------------
2022-07-19 11:44:50.674000

(2 rows)

查询结果:时间查询结果一致,但是双方对NULL处理方式产生差异。

时间转字符串,对NULL值进行格式化处理(0000-00-00 00:00:00)

#MySQL
select  IFNULL(b_datetime, CAST('0000-00-00 00:00:00' AS date)) from `test`.`a`;
+---------------------------------------------------------+
| IFNULL(b_datetime, CAST('0000-00-00 00:00:00' AS date)) |
+---------------------------------------------------------+
| 2022-07-19 11:44:50.674000                              |
| NULL                                                    |
+---------------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

IFNULL(v1,v2) :如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。 懵逼了

select  IFNULL(b_datetime, '0000-00-00 00:00:00') from `test`.`a`;
+-------------------------------------------+
| IFNULL(b_datetime, '0000-00-00 00:00:00') |
+-------------------------------------------+
| 2022-07-19 11:44:50.674000                |
| 0000-00-00 00:00:00                       |
+-------------------------------------------+
2 rows in set (0.00 sec)


IFNULL 内部不进行类型转换 去掉CAST函数 OK了 ,赞一下。

SELECT DATE_FORMAT(IFNULL(b_datetime, '0000-00-00 00:00:00'), '%Y-%m-%d %H:%i:%s.%f') from `test`.`a`;
+--------------------------------------------------------------------------------+
| DATE_FORMAT(IFNULL(b_datetime, '0000-00-00 00:00:00'), '%Y-%m-%d %H:%i:%s.%f') |
+--------------------------------------------------------------------------------+
| 2022-07-19 11:44:50.674000                                                     |
| NULL                                                                           |
+--------------------------------------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

DATE_FORMAT(IFNULL()) 格式化 错误,未到预期结果,郁闷下。DATE_FORMAT 格式化0000-00-00 00:00:00时间返回NULL

SELECT if(`b_datetime` is NULL, '0000-00-00 00:00:00' , DATE_FORMAT(`b_datetime`, '%Y-%m-%d %H:%i:%s.%f')) datetime from `test`.`a`;
+----------------------------+
| datetime                   |
+----------------------------+
| 2022-07-19 11:44:50.674000 |
| 0000-00-00 00:00:00        |
+----------------------------+
2 rows in set (0.00 sec)

使用if(,,)函数,目标达成。赞美自己

===============================================================
#openGauss

SELECT  nvl(to_char(b_datetime, 'YYYY-MM-DD HH24:MI:SS.FF') ,'0000-00-00 00:00:00') datetime from "test"."a" ;
          datetime
----------------------------
2022-07-19 11:44:50.674000
0000-00-00 00:00:00
(2 rows)

#备注
NULLIF(value1,value2)函数:在mysql和opengauss中都存在,用法一致。 只有当value1和value2相等时,NULLIF才返回NULL。否则它返回value1。
IFNULL 函数只有MySQL有,IFNULL(v1,v2) 如果 v1 的值不为 NULL,则返回 v1,否则返回 v2。
NVL函数只有opengauss有,NVL(value1,value2) 如果value1为NULL则返回value2,如果value1非NULL,则返回value1。

日期转为时间戳

#MySQL
SELECT UNIX_TIMESTAMP(b_datetime),b_datetime from `test`.`a`;
+----------------------------+----------------------------+
| UNIX_TIMESTAMP(b_datetime) | b_datetime                 |
+----------------------------+----------------------------+
|          1658202290.674000 | 2022-07-19 11:44:50.674000 |
|                       NULL | NULL                       |
+----------------------------+----------------------------+
2 rows in set (0.00 sec)

SELECT UNIX_TIMESTAMP(b_datetime)*1000,b_datetime from `test`.`a`;
+---------------------------------+----------------------------+
| UNIX_TIMESTAMP(b_datetime)*1000 | b_datetime                 |
+---------------------------------+----------------------------+
|            1658202290674.000000 | 2022-07-19 11:44:50.674000 |
|                            NULL | NULL                       |
+---------------------------------+----------------------------+
2 rows in set (0.00 sec)

SELECT UNIX_TIMESTAMP(b_datetime)*1000000,b_datetime from `test`.`a`;
+------------------------------------+----------------------------+
| UNIX_TIMESTAMP(b_datetime)*1000000 | b_datetime                 |
+------------------------------------+----------------------------+
|            1658202290674000.000000 | 2022-07-19 11:44:50.674000 |
|                               NULL | NULL                       |
+------------------------------------+----------------------------+
2 rows in set (0.00 sec)

===============================================================
#openGauss

select extract(epoch from b_datetime) datetime,b_datetime from "test"."a";
    datetime    |       b_datetime
----------------+-------------------------
1658231090.674 | 2022-07-19 11:44:50.674
                |
(2 rows)

select extract(epoch from b_datetime)*1000 datetime,b_datetime from "test"."a";
   datetime    |       b_datetime
---------------+-------------------------
1658231090674 | 2022-07-19 11:44:50.674
               |
(2 rows)

select extract(epoch from b_datetime)*1000000 datetime,b_datetime from "test"."a";
      datetime      |       b_datetime
--------------------+-------------------------
1.658231090674e+15 | 2022-07-19 11:44:50.674
                    |
(2 rows)
# 数据分析:
opengauss在微妙转换时,达到16位会进行数据转换,转为科学计数
另mysql和opengauss 再讲时间转换为毫秒时,产生数据差异:
opengauss   1658231090674
mysql      1658202290674.000000
select (1658231090674 - 1658202290674) time_diff ,(1658231090674 - 1658202290674)/(1000*60*60*8) _8hour;
time_diff | _8hour
-----------+--------
  28800000 |      1
(1 row)

opengauss 和mysql 转换时间戳,基于时区处理。这里要考虑数据库时间的时区属性。

数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践 基于开源三方件mysql-binlog-connector-java解析mysql的binlog, 并根据mysql主备进行复制的原理,对可并行的事务在openGauss端采用多线程进行并行回放,以实现MySQL到openGauss的在线迁移。通过支持表级并行迁移,提升MySQL全量迁移性能,基于sysbench测试模型,在Kunpeng-920 2p服务器上,10张表(单表容量三百万以上)使用10并发迁移,可达到大于300M/s的迁移性能。工具链:MySQL增量迁移支持十五级并行消费,提升增量迁移性能。 阅读详情

相关推荐

高斯数据库和ORCLE、mysql数据库的区别

3. GaussDB:面向云原生和分布式场景,适合需要弹性扩展、混合负载(HTAP)或国产化替代需求的企业(如政务云、物联网大数据)。均提供主从复制、集群部署等方案(如 Oracle Data Guard、MySQL 主从复制、GaussDB 分片多副本)。-均基于关系模型,支持 *SQL 语法*,提供事务的 *ACID*(原子性、一致性、隔离性、持久性)保障。1. Oracle:适合预算充足、需要复杂事务处理与高稳定性的传统企业核心系统(如银行、电信)。1. 关系型数据库核心特性。

samHuangLiang的博客 2506

盘点一下PostgreSQL和MySQL的区别点

盘点一下PostgreSQL和MySQL的区别点

weixin_47162914的博客 3万+

比较数据迁移后MySQL数据库和openGauss数据仓库中的表

设计一个MySQL数据库和openGauss数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。

weixin_30777913的博客 1050

OpenGauss中的VARCAHR(n)与MySQL的区别

今天在进行两个数据库的对比实验中发现这个问题 数据库使用UTF-8编码,在user表中有字段username,类型为VARCAHR(10),在MySQL中存储一条username为”商城用户“的数据,没有报错,但是在OpenGauss中报错: ERROR: value too long for type character varying(10) CONTEXT: referenced column: username 插入值的长度太长了,于是考虑OpenGauss中VARCAHR(n)中n表示最大存

weixin_46232441的博客 2013

mysql迁移到openGauss数据库笔记

mysql迁移到opengauss笔记

qq_48433464的博客 1870

openGauss-MySQL兼容性增强

本特性主要从以下几方面增强openGauss与MySQL的兼容性(只列举部分典型语法,详情请参见《数据迁移指南》中“MySQL兼容性说明”章节):。支持用户锁,允许用户通过sql加自定义的锁,可以让多个程序之间完成加锁相关的交互过程,使得客户端从任何位置访问都可以得到一致性的锁视图。支持建表插入数据时默认记录插入当前时间;更新数据时,如果未指定更新时间,默认显示数据变更的当前时间。支持设置会话级SQL模式,允许运行时变更、全局变更以及会话内变更。支持隐藏索引,隐藏索引不会被优化器使用。

liuyifei001的博客 648

DataKit迁移MySQL到openGauss

本文将分享DataKit迁移MySQL到openGauss的项目实战,供广大openGauss爱好者参考。

Gauss松鼠会 3828

如何使用pgloader迁移MySQL数据库至openGauss

pgloader 是一个数据导入工具,使用 COPY 命令将数据导入到 PostgreSQL。pgloader 有两种工作模式,一种是从文件导入,一种是迁移数据库。pgloader 在两种情况下都使用 PostgreSQL 的 COPY 协议高效的传输数据。openGauss 兼容 PostgreSQL 的通信协议以及绝大部分语法,可使用 pgloader 将 MySQL 数据库迁移至 openGauss。

2401_83143557的博客 1526

【项目实战经验】DataKit迁移MySQL到openGauss(上)

本文将分享DataKit迁移MySQL到openGauss的项目实战,供广大openGauss爱好者参考。

Gauss松鼠会 3071

单细胞转录组肿瘤细胞识别:inferCNV与CopyKAT实战解析

单细胞转录组测序(scRNA-seq)是解析肿瘤微环境的重要技术,但如何从海量细胞中准确区分恶性细胞与正常细胞,始终是数据分析的关键难题。传统marker注释在异质性肿瘤中常失效,而基于拷贝数变异(CNV)的推断方法为这一问题提供了更稳健的解决路径。CNV通过检测染色体大片段的增益或缺失,可在无先验标记的情况下识别恶性细胞,尤其适合实体瘤研究。inferCNV利用染色体滑动窗口分析相对表达量,生成直观的CNV热图;CopyKAT则结合高斯混合模型对每个细胞直接分类,输出肿瘤/正常/非整倍体标签。本文从原理出

weixin_31236101的博客 249

TLSR8258蓝牙Mesh实战:从SDK下载到自定义通信指令全流程(附避坑指南)

本文详细介绍了TLSR8258蓝牙Mesh开发的完整流程,从SDK下载、环境搭建到自定义通信指令的实现。通过实战案例和避坑指南,帮助开发者快速掌握低功耗蓝牙Mesh网络构建技巧,适用于智能家居、工业监控等物联网场景。

weixin_29176179的博客 199

openGauss 与行业数据治理:从数据孤岛到统一分析底座

在数字化浪潮中,。金融、能源、制造等行业正加速数字化转型,期望以数据驱动创新与效率。但几乎所有企业都面临共同难题——企业数据往往分散在不同系统:交易数据存于;行为日志与传感器数据在或;各部门自建;时序数据写入。:分析师将大量时间耗在数据清洗与整合上;:缺乏实时、全局视角;:标准不一、血缘不清;:模型训练数据难以统一获取。打破数据孤岛,构建统一分析平台,已成为数字化转型的关键。本文将探讨如何凭借联邦查询、生态协同与企业级安全特性,构建企业的。

羑悻的博客. 9900

西电微机系统课程设计——步进电机开环控制系统设计

西电微机系统课程设计——步进电机开环控制系统设计 一、课程设计目的 1.掌握微机系统总线与各芯片管脚连接方法,提高接口扩展硬件电路的连接能力。 2.加深对 A/D 和并行接口芯片的工作方式和编程方法的理解。 3.搞懂步进电机的工作原理及控制方式,掌握开环控制系统的设计思路和实现方法。 二、课程设计的内容 手动调节电位器旋钮(0V~5V),通过 ADC0809 模拟输入水库水位 0 米~50 米,CPU收到水位信号后,根据水位高度控制步进电机(水闸)进行调节。 三、系统功能与设计要求 基本功能要求 手

OutlierLi's Blog 7524

MySQL到openGauss数据迁移实用教程

本教程详细介绍如何在有限的硬件资源下,将MySQL数据库平稳迁移到openGauss数据库系统。随着企业数字化转型的深入,越来越多的组织开始关注优越性能数据库的替代和性能优化。openGauss作为新一代企业级开源关系型数据库,凭借其卓越的性能、完善的生态和自主可控的特性,成为MySQL迁移的理想选择。 本教程基于实际的小型服务器环境,通过3种可行的迁移方案,帮助读者在资源有限的条件下完成数据库迁移,同时最大限度发挥openGauss的性能优势。

qq_53317005的博客 1万+

Flink on k8s 环境搭建(一)

Flink on Yarn的环境搭建过程中,需要进行配置较多,且需要搭建zookeeper Hadoop Yarn 等相关组件,安装流程比较复杂,集群出现问题重新安装的流程也比较复杂,且Yarn的3个节点中 只能起了 3个resourceManager和1个NodeManager,Flink 作业申请资源时只能 向NodeManager的节点申请资源,整体有资源瓶颈的隐患(后继flink作业会越来越多),现在尝试进行Flink on k8s 的环境搭建。

wangqiaowq的博客 3413

基于自适应小波阈值算法的图像去噪

自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。

与其临渊羡鱼,不如退而结网 558

Mysql迁移OpenGauss

公司要做信创的迁移,本文简单描述了一下Mysql迁移到OpenGauss的大概流程步骤

weixin_44739106的博客 7900

华为OD机试 - 统计文本数量(Java 2025 A卷 100分)

华为OD机试 2025A卷题库疯狂收录中,刷题。

学Java,找哪吒 1438

基于DataKit迁移MySQL到openGauss

DataKit是一个以资源(物理机,数据库)为底座的开发运维工具

IT邦德 2997

Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师

从金鱼到最强大脑通过 Spring AI 的记忆功能,我们成功让 AI:记住了用户身份实现了多用户隔离做到了持久化存储最终效果用户:“和上次一样” → AI 秒懂用户:“你知道我的名字吗?” → AI:“当然,张三!AI的进化路线🐟金鱼脑 →🧠最强大脑 →🏛️记忆宫殿管理员。

liaokailin的专栏 1516

ABAP CDS HAVING 全解析:聚合之后的精准过滤、最佳实践与可运行示例

摘要: 本文针对具备ABAP与CDS基础的开发者,详解HAVING在ABAP CDS中的核心用法。HAVING专用于过滤GROUP BY后的聚合结果(如SUM、COUNT),与WHERE的分工明确:前者处理聚合值,后者过滤原始记录。通过销售额阈值、质量分析、财务对账三类典型场景,结合性能优化建议(如优先使用WHERE索引过滤),说明实际应用。文中提供经典CDS View与View Entity两种实现代码,并附Open SQL消费示例,帮助开发者快速落地。常见误区(如聚合条件误写至WHERE)与规避方法亦被

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 220

OpenGauss MySQL兼容库迁移

我的方案是,对mysqldump出的脚本进行处理,首先要明确,mysqldump导出的不是一个二进制文件,而是一个SQL脚本,而且可以通过命令行参数控制mysqldump只导出表定义,或者只导出插入数据的INSERT语句,首先只导出表定义,然后提取和删除表定义中的索引、UNIQUE约束的外键约束,表定义中只有列定义和主键定义,这些OG的MySQL兼容模式足以应对,建表时几乎不会出错,如果出错再具体问题具体分析。尝试过直接导入OG 5.0.0的MySQL兼容模式,有不少错误,这些也是迁移工作的重点。

howard_shooter的博客 1180

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

【原创】国产化适配-全量迁移MySQL数据到OpenGauss数据库

摘要:作者在将MySQL迁移到OpenGauss时遇到官方工具bug,选择自研解决方案。文章详细对比了两种数据库的表结构差异,包括数据类型转换(如VARCHAR改为NVARCHAR2)、索引处理等关键问题。作者开发了开源迁移工具,仅26MB大小,支持分页查询、线程池优化和转义处理,并提供详细的迁移报表。该项目已在Gitee开源(https://gitee.com/decentant/mysql-to-opengauss),解决了官方工具长期未修复的问题,实现了更轻量高效的数据库迁移方案。

DCTANT的博客 2151

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

openGauss mysql_fdw

使用外表前,可以在openGauss server所在的机器上,使用MariaDB/MySQL Server的客户端,使用对应的用户名密码确认能否成功连接MariaDB/MySQL Server并进行操作。在openGauss上建立外表时,不会同步在MariaDB/MySQL Server上建表,需要自己利用MariaDB/MySQL Server的客户端连接MariaDB/MySQL Server建表。编译mysql_fdw需要安装MariaDB的开发库和头文件,推荐使用MariaDB的。

2301_79720856的博客 1038

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

基于 OpenGauss 6.0.0 浅谈其与 MySQL 语法兼容性

随着数据库技术的不断发展,企业和开发者对于数据库的选择越来越多样化。OpenGauss 作为一款高性能、高可靠性的开源关系型数据库,不仅继承了 PostgreSQL 的强大功能,还在多个方面进行了优化和增强,特别是对 MySQL 语法的兼容性。本文将基...

openGauss的博客 1358
上一篇: openGauss DataStadio Eclipse-RCP开发环境搭建总结
下一篇: Arthas 使用以及火焰图
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰望星空@脚踏实地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值