瀚高数据库兼容Mysql分析详解
声明:
本文章内容仅用于学习、交流,未经瀚高数据库售前团队允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的,利用此文所提供的信息而造成的任何直接或间接的损失,均由使用者本人负责。
产
品
概
述
01
产品介绍
Mysql
mysql由瑞典mysql AB公司开发,目前属于oracle旗下产品。
mysql在web应用方面是最流行的关系型数据库管理系统之一,mysql软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择mysql作为网站数据库,如LAMP环境。
02
产品发展史
开源协议差异
mysql采用双重许可方法:
-  
       GPLv2 (用于社区版)- 协议规定只要使用了它的项目都必须开源,不管是否在销售。 
-  
       企业版商业许可- 提供各种付费版本以用于商业用途,受 oracle 约束 。 
03
瀚高安全版数据库特点
04
瀚高企业版数据库特点
强大的新一代内核升级
-  
       基于 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 相比,性能差距大幅缩小。 
兼
容
分
析
01
兼容参数
兼容参数1:compatible_db
- 默认为“none”,表示关闭兼容模式; 
- 设置为“oracle”表示开启oracle兼容模式,适用于源库是oracle的场合; 
- 设置为“mysql”表示开启mysql兼容模式,适用于源库是mysql的场合; 
- 在postgresql.conf文件中增加compatible_db = mysql;开启mysql兼容模式; 
- 执行重载命令pg_ctl reload生效参数; 
- 登录数据库执行show compatible_db;来查看参数是否生效。 
- 在数据库会话中执行set compatible_db = mysql;临时开启mysql兼容模式,会话级别。 
- show compatible_db;来查看参数是否生效。 
兼容参数2:case_sensitive_db
HighGo DB
MySQL
兼容参数3:lower_case_table_names
功能介绍:
表名大小写控制参数。该参数的可取值为0、1、2,默认值为0。1是表名转小写(不敏感),2和0一样都是大、小、混合写敏感。要与参数1和参数2结合使用。重载生效。
案例2:
此参数默认为0,0和2的效果一样,可以参考上面的案例1。接下来测试为1时表名不敏感:
兼容参数4:flatten_keyword_list
兼容参数5:
session_restore_keyword_list
兼容参数6:flatten_sconst_list
功能介绍:
可配置任意sconst到此列表中,被配置的sconst会被当做普通的标识符识别(此参数需要compatible_db设为mysql时生效)。默认无,需要手动追加postgresql.conf中,并重载生效。
案例5:
在案例4的基础上,测试正常命名的别名加引号和保留关键字作别名加引号的情况。
设置前报错:
在postgresql.conf中配置并使其生效:
配置需要做别名的带引号的字符串后,跟mysql用法完全兼容:
兼容参数7:
session_restore_sconst_list
flatten_ sconst _list中配置的对应值sm无效:
兼容参数8:
func_args_emptystr_to_null
其他兼容参数及注意事项
-  
       敏感:区分大小写,如果是相同单词,大小写不同则兼容参数可以使用成功。 
-  
       不敏感:不区分大小写,如果是相同单词,大小写不同则兼容参数不能使用成功。 
 
-  
       迁移之前要设置兼容参数 compatible_db ,避免不兼容导致的迁移失败; 
-  
       设置原则:源库是 oracle 的设置 oracle 兼容,源库是 mysql 的设置 mysql兼容; 
-  
       根据实际情况开启兼容参数,可以提前与瀚高的销售、迁移工程师联系沟通。 
02
兼容数据类型
兼容数据类型1:text 
-  
       长度不一样: mysql 存储范围是 0-65 535 bytes 。 HGDB 最大容量是 1GB 。 
-  
       在使用上, mysql 细分为: 
-  
       tinytext 
-  
       text 
-  
       mediumtext 
-  
       longtext 以上4 种 text 类型,有不同的使用限制,HGDB没有使用上的限制。 
兼容数据类型2:timestamp
-  
       范围不一样: mysql 范围是 ‘1970-01-01 00:00:01.000000’到‘2038-01-19 03:14:07.999999’。并且受时区影响。 HGDB 范围是 4713 BC 到 294276 AD, 可选择时区。 
-  
       精确度不一样: mysql 只能精确到秒 , HGDB 能精确到毫秒。 
兼容数据类型3:bytea
-  
       名称不一样: mysql 存储二进制大对象数据类型是 blob,HGDB 的是 bytea 。 
-  
       长度不一样: mysql 的 BLOB 是个类型系列,包括: tinyblob、blob、mediumblob、longb lob, 有不同的使用限制 , HGDB 的 bytea 没有使用上的限制,最多保存 2G 的数据。 
其他兼容数据类型
03
兼容函数
兼容函数1:date_sub
-  
       indate :原始时间戳 
-  
       ininterval :需要减去的时间 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql 。 
HighGo DB
MySQL
兼容函数2:date_add
-  
       与 mysql 使用一样; 
-  
       需要开 启compatible_db 为 mysql 。 
HighGo DB
MySQL
兼容函数3:datediff
-  
       expr1: 结束时间戳 
-  
       expr2: 开始时间戳 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_d b 为 mysql 。 
HighGo DB
MySQL
兼容函数4:replace
-  
       str: 要搜索的字符串表达式 
-  
       from_str: 要查找的子字符串 
-  
       to_str: 替换字符串 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql 。 
HighGo DB
MySQL
兼容函数5:unix_timestamp
-  
       无参:返回 unix 时间戳,从 UTC'1970-01-01 00:00:00' 开始的秒数。 
-  
       带参:计算输入时间与 UTC'1970-01-01 00:00:00' 开 始的秒数。 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql。 
HighGo DB
MySQL
兼容函数6:from_unixtime
-  
       expr1: 秒数 
-  
       expr2: 显示的格式 
-  
       与 mysql 使用一样; 
-  
       需要开 启 compatible_db为mysql。 
HighGo DB
MySQL
兼容函数7:if
-  
       expr1 :必须项。要测试的值。 
-  
       value_if_true:true 时 要返回的值。 
-  
       value_if_false :false 时要返回的值。 
-  
       与 my sql 使用一样; 
-  
       需要开启 compatible_db 为 mys ql。 
HighGo DB
MySQL
兼容函数8:group_concat
-  
       expr: 要连接的字符串 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql。 
HighGo DB
MySQL
兼容函数9:field
-  
       expr1: 查找的字符串或者列 
-  
       expr2… : 字符串列表 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql。 
HighGo DB
MySQL
兼容函数10:left
-  
       str: 要截取的字符串 
-  
       len: 指定长度 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql 。 
HighGo DB
MySQL
其他兼容函数
04
兼容语法
兼容语法1:简化分组排序的规则
- 兼容mysql的group by用法,无论是否存在主键,group by子句中的列允许少于目标列。 
- 兼容mysql的distinct+order by用法,使用distinct时,order by子句中的列允许不在目标列。 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql 。 
HighGo DB
MySQL
兼容语法2:DELETE table_name
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 使用一样; 
-  
       需要开启 compatible_db 为 mysql 。 
HighGo DB
MySQL
兼容语法3:会话变量
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql。 
HighGo DB
MySQL
兼容语法4:case…when…then和else
兼容说明:
then和else类型可以不一致。
差异说明: 
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql。 
HighGo DB
MySQL
兼容语法5:别名加单引号
-  
       与 mysql 使用一样; 
-  
       需要开启 compatible_db 为 mysql ; 
-  
       加引号的别名追加到 flatten_sconst_list。 
HighGo DB
MySQL
其他兼容语法
S
Q
L
语
法
兼
容
评
估
01
SQL语法兼容评估工具介绍
1.SQL语法兼容评估工具介绍
2.环境要求:JDK1.8
3.项目结构
4.启动方式
5.兼容评估工具使用说明
-  
       选择源日志数据库类型 为 mysql; 
-  
       选择 mysql 的 SQL 执行日志文件; 
-  
       设置目标端连接信息 (HighGo 数据库); 
-  
       点击开始; 
-  
       在项目根目录 / checkResults/..文件夹下生成“xx_mysql_xx.ssc” 文件,即为执行得到结果。 
6.生成兼容报告工具使用说明
-  
       选择 SQL 语法兼容评估工具生成的“ xx.ssc ” 文件; 
-  
       点击开始,生成 HTML 类型的报告,报告路径: 项目根目录 /reports/reports_xx/... 
02
SQL语法兼容评估使用
(以mysql为例)
mysql数据库获取SQL需要依赖mysql的日志,下面介绍开启mysql日志的过程。
1.查看日志配置
2.工具使用
03
SQL检查生成报告工具的使用
1.选择ssc源文件
2.生成兼容报告
戳戳戳!!!
长按关注
不迷路!
