vlambda博客
学习文章列表

瀚高数据库兼容Mysql分析详解








声明:

本文章内容仅用于学习、交流,未经瀚高数据库售前团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的,利用此文所提供的信息而造成的任何直接或间接的损失,均由使用者本人负责。









01

产品介绍


瀚高数据库兼容Mysql分析详解
HighGo DB 
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
HighGo DB 是瀚高软件完全自主知识产权、基于开源PostgreSQL代码研发的商业国产数据库产品。

2011年发布第一版,迭代至今自研功能涵盖安全性、性能提升、易用性、企业级特性、商业化支持,高度兼容 PostgreSQL、oracle、mysql 。提供企业版、安全版满足不同政企客户需求。
瀚高数据库兼容Mysql分析详解



瀚高数据库兼容Mysql分析详解

Mysql

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解

mysql由瑞典mysql AB公司开发,目前属于oracle旗下产品。


mysqlweb应用方面是最流行的关系型数据库管理系统之一,mysql软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择mysql作为网站数据库,如LAMP环境。

瀚高数据库兼容Mysql分析详解



02

产品发展史



瀚高数据库兼容Mysql分析详解



瀚高数据库兼容Mysql分析详解

开源协议差异

瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解
PostgreSQL 由全球的开发小组共同开发, BSD 协议下发布,商业应用不受任何公司实体所控制。
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

mysql采用双重许可方法:

  • GPLv2 (用于社区版)- 协议规定只要使用了它的项目都必须开源,不管是否在销售。
  • 企业版商业许可- 提供各种付费版本以用于商业用途,受 oracle 约束
瀚高数据库兼容Mysql分析详解



03

瀚高安全版数据库特点



瀚高数据库兼容Mysql分析详解



04

瀚高企业版数据库特点


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解

强大的新一代内核升级

  • 基于 PostgreSQL 12 内核;
  • 完全兼容 PostgreSQL 12 社区版;


丰富的企业级基因

  • 备份恢复管理 (HG_RMAN);
  • 流复制集群管理(HG_REPMGR)
  • 定时任务管理 (HG_JOB)
  • 闪回查询 (HG_FBQ)
  • 内核诊断 (HG_DEBUG)
  • 数据库性能诊断 (HG_PDR)
  • 流复制增强 (HG_STREAM)
  • 在线 DDL 增强;
  • 中文分词与检索 (HG_ULTRASEARCH)


原有自研功能的延续与改进

  • 整库加密;
  • 内置 HASH 分区表;
  • 直接路径加载;
  • 日志挖掘工具;


强大的新扩展

  • PostGISPipelinedb →流计算;


国产化硬件支持主流的国产平台

  • 飞腾、龙芯、兆芯、海光、海思等;


  • 性能提升基于 TPCC 标准测试;
  • 同等软硬件配置;
  • 和旧版本相比,性能可提升约 1 倍和 PG10 相比,性能可提升 20% 以上;
  • oracle 11g 相比,性能差距大幅缩小。
瀚高数据库兼容Mysql分析详解







如下皆以瀚高数据库安全版4.5.7和m
ysql5.7为例



01

兼容参数


瀚高数据库兼容Mysql分析详解

兼容参数1compatible_db

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
使用兼容功能前请先设置参数 compatible_db 。该参数的可取值为 none oracle 、mysql
  • 默认为none,表示关闭兼容模式;

  • 设置为oracle表示开启oracle兼容模式,适用于源库是oracle的场合;

  • 设置为mysql表示开启mysql兼容模式,适用于源库是mysql的场合;


设置方式有两种,一种是永久生效,一种是临时生效。

1.永久生效
  • postgresql.conf文件中增加compatible_db = mysql开启mysql兼容模式;

  • 执行重载命令pg_ctl reload生效参数;

  • 登录数据库执行show compatible_db;来查看参数是否生效。


2.临时生效
  • 在数据库会话中执行set compatible_db = mysql临时开启mysql兼容模式,会话级别。

  • show compatible_db;来查看参数是否生效。


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

容参数2case_sensitive_db

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
开启之后,大小写敏感。该参数的可取值为 on、off 默认为 off 。与参数1 和参数3结合使用。重载生效。

案例1:
compatible_db=‘mysql’;case_sensitive_db=on 时;






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解



瀚高数据库兼容Mysql分析详解

兼容参数3lower_case_table_names

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解

功能介绍:

表名大小写控制参数。该参数的可取值为0、1、2,默认值为0。1是表名转小写(不敏感),20一样都是大、小、混合写敏感。要与参数1和参数2结合使用。重载生效。

 

案例2

此参数默认为00和2的效果一样,可以参考上面的案例1。接下来测试为1时表名不敏感:


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解



瀚高数据库兼容Mysql分析详解

兼容参数4flatten_keyword_list

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
可配置任意关键字到此列表中,被配置的关键字会被当做普通的标识符识别(当关键字被识别成普通字符时,有些需要关键字的语法也就不能被识别)。 默认无,需要手动追加 postgresql.conf中,并重载生效。

案例3
HighGo DB 的保留关键字可自行网上查阅。

设置前报错:


瀚高数据库兼容Mysql分析详解


postgresql.conf 中配置并使其生效:


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


设置后创建成功,如果别名中使用保留关键字,还是报错,此时,继续追加到参数中即可:


瀚高数据库兼容Mysql分析详解


同理,在 postgresql.conf 中配置关键字并生效:

瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容参数5

session_restore_keyword_list

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
可配置任意关键字到此列表中,被配置的关键字与兼容参数4 flatten_keyword_list 冲突时,冲突关键字不会退化成标识符。默认无,需要手动追加 postgresql.conf 中,并重载生效。

案例4
在案例3的基础上,测试和 flatten_keyword_list 设置的参数 limit 冲突时的解决方案。

设置前冲突报错:


瀚高数据库兼容Mysql分析详解

postgresql.conf 中配置并使其生效:


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


设置后limit即恢复为保留关键字:


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容参数6flatten_sconst_list

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解

功能介绍:

可配置任意sconst到此列表中,被配置的sconst会被当做普通的标识符识别(此参数需要compatible_db设为mysql时生效。默认无,需要手动追加postgresql.conf中,并重载生效。


案例5

在案例4的基础上,测试正常命名的别名加引号和保留关键字作别名加引号的情况。


设置前报错:


瀚高数据库兼容Mysql分析详解


postgresql.conf中配置并使其生效:

瀚高数据库兼容Mysql分析详解



瀚高数据库兼容Mysql分析详解


配置需要做别名的带引号的字符串后,跟mysql用法完全兼容:


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容参数7

session_restore_sconst_list 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
可配置任意 sconst 到此列表中,被配置的 sconst 兼容参数6 flatten_ sconst _list 冲突时,冲突 sconst 不会退化成标识符。默认无,需要手动追加 postgresql.c onf 中,并重载生效。

案例6
在案例5的基础上,测试和 flatten_ sconst _list 设置的参数 all、s m 冲突时, flatten_sconst _list 中配置的对应值无效。

设置前:


瀚高数据库兼容Mysql分析详解


postgresql.conf 中配置 并使其生效:


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


flatten_ sconst _list 配置的对应 all无效:


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


flatten_ sconst _list中配置的对应值sm无效:


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容参数8

func_args_emptystr_to_null

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
将函数参数列表中的空串转换成 null 。该参数的可取值为 on、off ,默认值为 off 重载生效。

案例7
测试函数参数列表中的空串转换成 null

创建测试函数:


瀚高数据库兼容Mysql分析详解


空串没有转为 null


瀚高数据库兼容Mysql分析详解

开启兼容参数:


瀚高数据库兼容Mysql分析详解


空串转为 null


瀚高数据库兼容Mysql分析详解

瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

其他兼容参数及注意事项

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
其他兼容参数:
emptystr_to_null:将空串‘’转换成null时,需要设置参数 set emptystr_to_null = true set emptystr_to_null = on ;兼容空串转NULL处理。转换的范围包括:强转表达式,赋值,插入赋值。

以上是以瀚高数据库安全版4.5.7为例, 相信瀚高数据库在技术不断创新的前提下,后续的版本会追加新的兼容参数,来不断提高对 PostgreSQL、oracle、mysql 的兼容。

注意事项:

1、文章中对敏感和不敏感的解释如下:
  • 敏感:区分大小写,如果是相同单词,大小写不同则兼容参数可以使用成功。
  • 不敏感:不区分大小写,如果是相同单词,大小写不同则兼容参数不能使用成功。

2、关于迁移何时开启兼容参数:
  • 迁移之前要设置兼容参数 compatible_db ,避免不兼容导致的迁移失败;
  • 设置原则:源库是 oracle 的设置 oracle 兼容,源库是 mysql 的设置 mysql兼容;
  • 根据实际情况开启兼容参数,可以提前与瀚高的销售、迁移工程师联系沟通。
瀚高数据库兼容Mysql分析详解


02

兼容数据类型


瀚高数据库兼容Mysql分析详解
mysql 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。 5.7版本中支持的数据类型大致有40种。但是,存在一些弊端,如不支持几何数据类型、 text 类型有不同的限制、不支持 Number 类型、时间类型不能精确到秒以下、不支持 jsonb 类型、不支持 emoji 符号等。

反观 HighGo DB ,不仅支持传统的SQL数据类型(如数字、字符串、日期、十进制等),还支持非结构化数据类型(如: JSON、XMLHSTORE )以及网络数据类型、位字符串等。突出之处在于它支持更广泛的数据类型,如数组、网络类型和几何数据类型(包括高级空间数据函数)来存储和处理空间数据( PostGIS 的外部模块)。下面列出了一些替换数据类型列表(由迁移工具自动匹配转换)


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容数据类型1text 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
类型说明:
存储长文本数据。

兼容说明:
  • 长度不一样:
    mysql 存储范围是 0-65 535 bytes HGDB 最大容量是 1GB
  • 在使用上, mysql 细分为:
  • tinytext
  • text
  • mediumtext
  • longtext
    以上4 text 类型,有不同的使用限制,HGDB没有使用上的限制。
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容数据类型2timestamp 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
类型说明:
混合日期和时间值,时间戳。

兼容说明:
  • 范围不一样:
    mysql 范围是 ‘1970-01-01 00:00:01.000000’到‘2038-01-19 03:14:07.999999’并且受时区影响。 HGDB 范围是 4713 BC 294276 AD, 可选择时区。
  • 精确度不一样:
    mysql 只能精确到秒 HGDB 能精确到毫秒。
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容数据类型3bytea 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
类型说明:
存储二进制大对象数据类型。

兼容说明:
  • 名称不一样:
    mysql 存储二进制大对象数据类型是 blob,HGDB 的是 bytea
  • 长度不一样:
    mysql BLOB 是个类型系列,包括: tinyblob、blob、mediumblob、longb lob, 有不同的使用限制 HGDB bytea 没有使用上的限制,最多保存 2G 的数据。
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

其他兼容数据类型 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
还有很多兼容类型就不一一列举了。总之, HighGo DB 本身拥有丰富的数据类型,再加上功能强大的扩展性,如支持自定义类型和域,还支持自定义索引类型等,足够满足兼容 mysql 的所有类型,来支持所有数据类型的替换和保障业务能够正常运行。
瀚高数据库兼容Mysql分析详解


03

兼容函数


瀚高数据库兼容Mysql分析详解

兼容函数1date_sub 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
date 减去一个 interval
参数说明:
  • indate :原始时间戳
  • ininterval :需要减去的时间
返回值: date
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数2date_add

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍
date 加上一个 interval
参数说明: 
indate: 原始时间戳
ininterval: 需要加上的时间 
返回值: date。
差异说明:
  • mysql 使用一样;
  • 需要开 启compatible_db mysql

 





HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数3datediff

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
两个 date 之间的时间间隔。
参数说明:
  • expr1: 结束时间戳
  • expr2: 开始时间戳
返回值: inteval。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_d b mysql






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数4replace

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
支持不同类型的替换。
参数说明:
  • str: 要搜索的字符串表达式
  • from_str: 要查找的子字符串
  • to_str: 替换字符串
返回值:与第一个输入参数相同。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql






HighGo DB



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数5unix_timestamp 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
将日期时间转换为 unix 时间戳。
参数说明:
  • 无参:返回 unix 时间戳,从 UTC'1970-01-01 00:00:00' 开始的秒数。
  • 带参:计算输入时间与 UTC'1970-01-01 00:00:00' 始的秒数。
返回值:
UTC'1970-01-01 00:00:00' 开始的秒数。
差异说明
  • mysql 使用一样;
  • 需要开启 compatible_db mysql。
限制
能处理的时间上限是 int 最大值 2147483647 对应的时间 2038-01-19 11:14:07。 超出后为 0






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数6from_unixtime

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
把一个 unixtimestamp 转成 UTC date 格式。
参数说明:
  • expr1: 秒数
  • expr2: 显示的格式
返回值:时间。
差异说明:
  • mysql 使用一样;
  • 需要开 compatible_db为mysql。






HighGo DB



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数7if 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
如果条件为 TRUE 则返回第二个参数,否则返回第三个参数;
参数说明:
  • expr1 必须项。要测试的值。
  • value_if_true:true 要返回的值。
  • value_if_false :false 时要返回的值。
返回值:
第一个参数不为 0或 NULL ,返回第二个参数,否则返回第三个参数。
差异说明:
  • my sql 使用一样;
  • 需要开启 compatible_db mys ql。






HighGo DB



瀚高数据库兼容Mysql分析详解


查询结果1、3皆为abc;2、4、5、6皆为bcd。


瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解


查询结果1、3皆为abc;2、4、5、6皆为bcd


瀚高数据库兼容Mysql分析详解

瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数8group_concat 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
将列字符串拆分为行。以逗号为默认的连接字符,可以使用 DISTINCT 过滤重复的值,也可以加入 ORDERBY 对值进行排序,还可以使用SEPARATOR指定分隔符。
参数说明:
  • expr: 要连接的字符串
返回值:
将字符串拼接成一行。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql






HighGo DB



瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解







MySQL



瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数9field 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
用来对 SQL 中查询结果集进行指定顺序排序。
参数说明:
  • expr1: 查找的字符串或者列
  • expr2… 字符串列表
返回值:
将字符串拼接成一行。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql。






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容函数10left 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
功能介绍:
返回字符串中指定长度的左边字符。
参数说明:
  • str 要截取的字符串
  • len: 指定长度
返回值:
指定的字符串左边部分。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql






HighGo DB



瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

其他兼容函数

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
求和函数 sum、 以不同的格式显示时间日期数据函数 date_format 、获取表结构的相关信息函数 table_msg 等,就不一一列举了。

总之, HighGo DB 本身拥有强大的扩展功能,支持自定义函数,尤其是支持函数重载,能够满足兼容 mysql 的所有函数,来支持所有业务功能的替换,保障业务系统能够正常运行。
瀚高数据库兼容Mysql分析详解


04

兼容语法


瀚高数据库兼容Mysql分析详解

兼容语法1:简化分组排序的规则 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
兼容说明:
  • 兼容mysqlgroup by用法,无论是否存在主键,group by子句中的列允许少于目标列。

  • 兼容mysqldistinct+order by用法,使用distinct时,order by子句中的列允许不在目标列。

差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容语法2DELETE table_name

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
语法如下:
DELETE table_name[.*] [,table_name[.*] ...] FROM [ ONLY] table_name[*][,talbe_name [*]...] [ [ AS ] alias ][USING using_list][WHERE condition | WHERE CURRENT OF cursor_name ][RETURING *| output_expression [ [ AS ] output_name ] [ , ... ] ]
兼容说明:
兼容 mysql delete 删除多表用法。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容语法3:会话变量

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
兼容说明:
兼容 mysql 的会话变量。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql。






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容语法4casewhenthenelse 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解

兼容说明:

thenelse类型可以不一致。 

差异说明:

  • mysql 使用一样;
  • 需要开启 compatible_db mysql。






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

兼容语法5:别名加单引号 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
兼容说明:
支持别名加引号的语法。
差异说明:
  • mysql 使用一样;
  • 需要开启 compatible_db mysql
  • 加引号的别名追加到 flatten_sconst_list。






HighGo DB



瀚高数据库兼容Mysql分析详解






MySQL



瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

其他兼容语法

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
退化关键字、反引号语法、函数使用关键字作别名、函数使用单引号里的关键字作别名等在前面介绍 兼容参数时已经列举,当然还有兼容确定性函数 deterministic 等,在这里就不一一列举了。

总之, HighGo DB 度兼容 mysql 。但是,目前并不是完全兼容,毕竟各自的语法解析器、底层架构、内核开发语言是不一样的。

当然, HighGo DB 不断的技术突破、提高兼容性,版本优化升级迭代,凭借强大的扩展功能、技术先进性,尤其是自主可控、企业级功能丰富、复杂业务场景下可定制开发、满足各行业国产化要求等优势,能够在系统尽量少做修改和调整的基础上,做到整体迁移工作工具化、智能化、过程可控、范围可控、问题可控,最终实现应用系统在瀚高数据库上的稳定高效运行。
瀚高数据库兼容Mysql分析详解




S

Q

L




01

SQL语法兼容评估工具介绍


瀚高数据库兼容Mysql分析详解

1.SQL语法兼容评估工具介绍

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
为了批量找出与瀚高数据库的不兼容语法,并快速给出解决方案,提高迁移、适配效率,瀚高数据库研发了 SQL 法兼容评估工具和 SQL 检查生成报告工具,统称为 SQL 语法兼容评估工具。

SQL 语法兼容评估工具(简称 SQL-GCE )基于对数据库源端业务产生的SQL的分析,并在瀚高数据库中重演,根据重演结果生成报告。目前支持源数据库包括orace、SqlServermysql

SQL-GCE 是基于源库中业务 SQL 的,所以在使用之前需要对源数据库进行相关 SQL 日志的配置,以方便工具读取源 SQL

下面就兼容评估源库是 mysql 的情景做以下介绍, oracle、SqlServer 本资料暂不做介绍。
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

2.环境要求:JDK1.8

瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

3.项目结构

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


(左边为评估工具,右边为生成兼容报告工具)
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

4.启动方式

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
第一种,桌面启动:
双击 SqlSyntaxCheckTool-1.0-SNAPSHOT.jar 直接启动(生成兼容报告工具同理)。
第二种,命令启动:
java –jar SqlSyntaxCheckTool-1.0-SNAPSHOT.jar (生成兼容报告工具同理)。  
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

5.兼容评估工具使用说明 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
启动工具后
  • 选择源日志数据库类型 mysql;
  • 选择 mysql SQL 执行日志文件;
  • 设置目标端连接信息 (HighGo 数据库)
  • 点击开始;
  • 在项目根目录 / checkResults/..文件夹下生成“xx_mysql_xx.ssc” 文件,即为执行得到结果。 
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

6.生成兼容报告工具使用说明 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
启动工具后
  • 选择 SQL 语法兼容评估工具生成的“ xx.ssc 文件;
  • 点击开始,生成 HTML 类型的报告,报告路径:
    项目根目录 /reports/reports_xx/...
瀚高数据库兼容Mysql分析详解


02

SQL语法兼容评估使用

(以mysql为例)


mysql数据库获取SQL需要依赖mysql的日志,下面介绍开启mysql日志的过程。







瀚高数据库兼容Mysql分析详解

瀚高数据库兼容Mysql分析详解

1.查看日志配置 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
(1)查看日志配置命令:
mysql> show variables like 'general_log%’;

如果 general_log 设置为 OFF 说明日志功能处于关闭状态,而且日志文件无效或不存在,需要将其开启。


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解


2)开启日志功能命令:
mysql> set global general_log='ON';

如果 general_log 设置为 ON明日志功能已经打开,可以在general_log_file路径中找到日志文件。否则,就用上面命令开启日志功能。

注意:在抓取新的一次业务 sql 之前需要将老的日志进行清理,确保日志中不会有大量不相关的记录。


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

2.工具使 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
1)对应用进行增删改查的操作或者对源库 mysql 进行操作,目的是产生操作日志。将记录的 log 日志作为该工具的输入,由工具进行下一步处理。
(2)接下来就是启动工具,选择操作的日志文件来进行获取不兼容信息。
(3) 在项目根目录:
/checkResults/... 文件夹下生成 “xx_MYSQL_xx.ssc” 文件,即为执行得到结果。


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


03

SQL检查生成报告工具的使用


瀚高数据库兼容Mysql分析详解

1.ssc源文件

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
1)启动工具后,选择 SQL 语法兼容评估工具生成的 “xx.ssc” 文件。
 
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解

2.生成兼容报告 

瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
瀚高数据库兼容Mysql分析详解
1)每次生成报告都会在项目根目录 /reports/ 下生成 report_ 时间戳的文件夹。
2)点击详细信息前面的 “+” 能够展示该语法错误的 SQL 的原貌,方便用户全选并复制,下标从 0 开始。


瀚高数据库兼容Mysql分析详解


瀚高数据库兼容Mysql分析详解  
瀚高数据库兼容Mysql分析详解



 

戳戳戳!!!


长按关注

不迷路!