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

您所在的位置:网站首页 数据库的兼容性怎么设置 瀚高数据库兼容Mysql分析详解

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

2024-03-16 14:01| 来源: 网络整理| 查看: 265

本文转自微信公众号“瀚高数据库售前团队”文章 https://mp.weixin.qq.com/s/lWEIL402PqzJ6mIzHVgAWg 声明:

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

产品概述

01 产品介绍 HighGo DB Highgo DB 是瀚高软件完全自主知识产权、基于开源PostgreSQL代码研发的商业国产数据库产品。

2011年发布第一版,迭代至今自研功能涵盖安全性、性能提升、易用性、企业级特性、商业化支持,高度兼容PostgreSQL、oracle、mysql。提供企业版、安全版满足不同政企客户需求。 Mysql mysql由瑞典mysql AB公司开发,目前属于oracle旗下产品。

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

02 产品发展史

在这里插入图片描述

开源协议差异

PostgreSQL由全球的开发小组共同开发,在BSD协议下发布,商业应用不受任何公司实体所控制。

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相比,性能差距大幅缩小。

兼容分析

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

01 兼容参数

兼容参数1:compatible_db

功能介绍: 使用兼容功能前请先设置参数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;来查看参数是否生效。

兼容参数2:case_sensitive_db

功能介绍: 开启之后,大小写敏感。该参数的可取值为on、off,默认为off。与参数1和参数3结合使用。重载生效。

案例1:

compatible_db=‘mysql’;case_sensitive_db=on时;

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

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

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

设置前报错:

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

同理,在postgresql.conf中配置关键字并生效: 在这里插入图片描述

兼容参数5: session_restore_keyword_list

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

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

设置前冲突报错:

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

兼容参数6:flatten_sconst_list

功能介绍:

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

案例5:

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

设置前报错:

在这里插入图片描述

在postgresql.conf中配置并使其生效: 在这里插入图片描述

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

在这里插入图片描述

兼容参数7:session_restore_sconst_list

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

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

设置前:

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

flatten_ sconst _list中配置的对应值all无效: 在这里插入图片描述 在这里插入图片描述

flatten_ sconst _list中配置的对应值sm无效: 在这里插入图片描述

兼容参数8: func_args_emptystr_to_null

功能介绍: 将函数参数列表中的空串转换成null。该参数的可取值为on、off,默认值为off。重载生效。

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

创建测试函数:

在这里插入图片描述

空串没有转为null:

在这里插入图片描述

开启兼容参数:

在这里插入图片描述

空串转为null: 在这里插入图片描述

其他兼容参数及注意事项

其他兼容参数: 如emptystr_to_null:将空串‘’转换成null时,则需要设置参数setemptystr_to_null = true或set emptystr_to_null = on;兼容空串转NULL处理。转换的范围包括:强转表达式,赋值,插入赋值。

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

注意事项:

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

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

02 兼容数据类型

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

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

在这里插入图片描述

兼容数据类型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、longblob,有不同的使用限制,HGDB的bytea没有使用上的限制,最多保存2G的数据。

其他兼容数据类型

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

03 兼容函数

兼容函数1:date_sub

功能介绍: date减去一个interval。 参数说明: indate:原始时间戳 ininterval:需要减去的时间 返回值:date。 差异说明: 与mysql使用一样; 需要开启compatible_db为mysql。

HighGo DB

在这里插入图片描述

MySQL

在这里插入图片描述

兼容函数2:date_add

功能介绍: date加上一个interval。 参数说明: indate:原始时间戳 ininterval:需要加上的时间 返回值:date。 差异说明: 与mysql使用一样; 需要开启compatible_db为mysql。

HighGo DB

在这里插入图片描述 MySQL

在这里插入图片描述

兼容函数3:datediff

功能介绍: 两个date之间的时间间隔。 参数说明: expr1:结束时间戳 expr2:开始时间戳 返回值:inteval。 差异说明: 与mysql使用一样; 需要开启compatible_db为mysql。

HighGo DB

在这里插入图片描述

MySQL

在这里插入图片描述

兼容函数4:replace

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

HighGo DB 在这里插入图片描述

MySQL

在这里插入图片描述

兼容函数5:unix_timestamp

功能介绍: 将日期时间转换为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

在这里插入图片描述

兼容函数6:from_unixtime

功能介绍: 把一个unixtimestamp转成UTC的date格式。 参数说明: expr1:秒数 expr2:显示的格式 返回值:时间。 差异说明: 与mysql使用一样; 需要开启compatible_db为mysql。

HighGo DB

在这里插入图片描述

MySQL

在这里插入图片描述

兼容函数7:if

功能介绍: 如果条件为TRUE则返回第二个参数,否则返回第三个参数; 参数说明: expr1:必须项。要测试的值。 value_if_true:true时要返回的值。 value_if_false :false时要返回的值。 返回值: 第一个参数不为0或者NULL,返回第二个参数,否则返回第三个参数。 差异说明: 与mysql使用一样; 需要开启compatible_db为mysql。

HighGo DB

在这里插入图片描述

MySQL

在这里插入图片描述

兼容函数8:group_concat

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

HighGo DB

在这里插入图片描述

MySQL

在这里插入图片描述

兼容函数9:field

功能介绍: 用来对SQL中查询结果集进行指定顺序排序。 参数说明: expr1:查找的字符串或者列 expr2…:字符串列表 返回值: 将字符串拼接成一行。 差异说明: 与mysql使用一样; 需要开启compatible_db为mysql。 … 未完,更多详细信息请关注瀚高瀚高数据库售前团队。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3