华为云用户手册

  • 什么是SSH密钥 当您需要将代码推送到代码托管仓库或从代码托管仓库下拉代码时,代码托管仓库需要验证您的身份与权限,SSH是对 代码托管服务 进行远程访问的身份验证方式。 SSH密钥是一种加密的网络传输协议,在电脑与您账号下的代码托管服务之间建立安全连接。 在一台电脑上配置了SSH密钥并添加公钥到代码托管服务中后,所有该账号下的代码仓库与该台电脑之间都可以使用该密钥进行连接。 不同的用户通常使用不同的电脑,在使用SSH方式连接代码仓库前需要在自己电脑生成自己的SSH密钥,并设置到远程仓库中。
  • 配置“MR预合并” 当MR创建后,您可自定义WebHook、流水线等下载插件的脚本,即下载代码内容可以由您自己控制。 如果勾选“MR预合并”,则服务端会帮助您生成一个隐藏分支,表示该MR代码已经合入,进而您可以直接下载已经存在在隐藏分支的代码。 如果未勾选“MR预合并”,您需要在客户端本地做预合并,即分别下载MR源分支、MR目标分支的代码,并在构建执行机自己做合并动作。 操作命令 服务端预合并命令如下: git init git remote add origin ${repo_url克隆/下载地址} git fetch origin +refs/merge-requests/${repo_MR_iid}/merge:refs/${repo_MR_iid}merge 如果未勾选,则可以通过客户端做预合并操作,本地新建干净的工作目录,命令如下: git init git remote add origin ${repo_url克隆/下载地址} git fetch origin +refs/heads/${repoTargetBranch}:refs/remotes/origin/${repoTargetBranch} git checkout ${repoTargetBranch} git fetch origin +refs/merge-requests/${repo_MR_iid}/head:refs/remotes/origin/${repo_MR_iid}/head git merge refs/remotes/origin/${repo_MR_iid}/head --no-edit 功能优势 对于构建实时性要求高的场景,如:一个MR可能拉起几十或上百台服务器的构建,本地/客户端做预合并可能会与服务端产生的结果不一致,导致构建代码获取不够准确、构建结果不准确等问题。使用服务端预合并可以解决该实时性问题,并且构建脚本命令更简单,开发人员或CIE更好上手。
  • 编辑保护分支 在保护分支中可以针对某条分支进行设置,具体操作如下: 单击“新建保护分支”,出现添加保护分支弹窗,从下拉列表中选择一个分支或手动输入分支名称或通配符,勾选对应的权限设置,也可以直接配置用户权限,单击“确定”,即可完成保护分支的创建。 单击图标,即可修改保护分支的配置信息。 单击图标,即可删除保护分支。 设置白名单:如果您需要给未赋权角色中的某个或某些成员赋予权限时,可通过勾选“成员”下的“能推送”、“能合并”选项,单击下拉框选择成员加入白名单。 只有开发人员、Committer、管理员/项目经理具备“能推送”、“能合并”权限。 如果当能推送事件的角色选择了“管理员/项目经理”、“Committer”和“开发人员”三种角色,则该三种角色都具备权限,无需再勾选成员下的“能推送”或“能合并”。 支持批量新建、编辑、删除保护分支。
  • 操作步骤 登录控制台,单击页面左上角,搜索“代码托管”,单击,进入代码托管服务仓库列表页。 单击“新建仓库”按钮,跳转到“归属项目和仓库类型”页面,在“归属项目”下拉框中选择选择已有的项目或者“新建项目”。 代码仓库必须挂到项目下,通过项目维度查看仓库看板。 如果账号下没有项目请在项目选择框中选择“新建项目”会先弹出“新建项目”页面,这时建立的项目是Scrum或IPD-自运营软件/云服务类。 仓库类型选择“模板仓库”。 单击“下一步”按钮,跳转到“按模板新建”页面。 选择想要的模板,支持在搜索栏中模糊查询。 单击“下一步”按钮,进入“基本信息”页面,填写仓库基本信息。 表1 按模板新建仓库的参数说明 字段名称 是否必填 备注说明 代码仓库名称 是 请以大小写字母、数字、下划线开头,可包含大小写字母、数字、中划线、下划线、英文句点,但不能以.git、.atom或.结尾,仓库名称至少2个字符,总长度不超过255个字符。 描述 否 为您的仓库填写描述,限制2000个字符。 初始化设置 否 自动创建代码检查任务(免费)。 仓库创建完成后在代码检查任务列表中,可看到对应仓库的检查任务。 说明: "将项目开发人员自动添加为该仓库成员" 功能下线,不再自动将项目经理和开发人员添加为仓库成员。仅默认将项目创建者、项目管理员加入仓库。 如果模板含“自动创建流水线”,则不涉及该参数。 项目成员自动添加到仓库的功能,可基于成员组的成员动态同步能力实现。 是否公开 是 可选择: 私有(仓库仅对仓库成员可见,仓库成员可访问仓库或者提交代码)。 公开只读(仓库对所有访客公开只读,但不出现在访客的仓库列表及搜索中 ) 添加开源许可证 否 如果仓库设置为公开,可下拉选择已有的许可证。 单击“确定”按钮,完成仓库新建。 按模板新建时,仓库的类型会根据选择的模板的仓库类型自动配置。 按模板新建的仓库将包含模板预置的仓库文件结构。
  • IP白名单格式 IP白名单支持IPv4和IPv6,有3种格式,如下表所示。 表1 IP白名单格式 格式 说明 单个IP 这是最简单的一种IP白名单格式,如将您的个人家庭电脑的IP添加到白名单中,比如:100.*.*.123。 IP范围 当您拥有不止一台服务器而且IP段是连续的,或者您的IP会在一个网段内动态变化,这时您可以添加一个IP白名单范围,比如:100.*.*.0 - 100.*.*.255。 CIDR格式(无类别域间路由) 当您的服务器在一个局域网内并使用CIDR路由时,您可以指定局域网的32位出口IP以及一个指定网络前缀的位数。 从同一个IP发起的请求,只要网络前缀同您设定的前缀部分相同,即可视为来自同一授信范围从而被接受。
  • 新建提交规则 仓库管理员和仓库所有者可针对仓库某一分支新建提交规则,每个分支只能设置一条提交规则。 提交规则的优先匹配机制: 1、目标分支优先匹配已配置的提交规则; 2、准确匹配不到时,以模糊匹配到的第一条规则为准; 3、模糊匹配不到后以default规则为准。 表3 字段说明 字段 说明 规则名称 必填,新建提交规则的名称,限制200个字符。 分支规则 必填,下拉选择分支或者创建一个正则表达式,限制500个字符。 提交规则 非必填。 提交信息:提交信息默认为空,不会对提交信息校验,任何提交信息都可以提交,限制500个字符。 例如:设置Commit message的格式规则: TraceNo:(REQ[0-9]{1,9})(.|\n|.\n)Author:.*(.|\n|.\n)Description:.* 设置符合规范Commit message: TraceNo:REQ1234567 Author:**** Description:testpushfile 设置不符合规范Commit message: new files commit提交信息负面匹配规则:提交信息负面匹配规则默认为空,不会对提交信息校验,任何提交信息都可以提交,限制500个字符。 例如:设置Commit message的格式规则: TraceNo:(REQ[0-9]{1,9})(.|\n|.\n)Author:.*(.|\n|.\n)Description:.* 提交人:提交人默认为空,不会对提交人校验,任何人都可以提交,限制200个字符。 提交人可通过“git config -l”查看user.name的值,并通过“git config --global user.name”设置user.name的值。 例如: 设置提交人规则:([a-z][A-Z]{3})([0-9]{1,9}) 提交人邮箱地址:提交人邮箱地址默认为空,不会对提交人邮箱地址校验,任何邮箱地址都可以提交,限制200个字符。 提交人可通过“git config -l”查看user.email的值,并通过“git config --global user.email”设置邮箱。 例如: 设置提交人邮箱规则:@huawei.com$ 文件基本属性规则 非必填。 禁止提交的文件名称:禁止提交的文件名称规则默认为空,不会对文件名校验,任何文件都可以提交,建议正则编写时使用规范的正则语句进行匹配,文件名禁用规则处默认会根据规则校验文件所属路径,限制2000个字符。 例如: 设置禁止提交的文件名称规则:(\.jar|\.exe)$ 单文件大小限制(MB):单文件推送大小(不含LFS)上限与您所购买的套餐规格一致,具体可查看约束与限制。 体验版/基础版:文件大小上限为200,表示添加或更新文件大小超过200MB,推送将被拒绝。管理员可以在0~200范围内修改值。 专业版/企业版:文件大小上限为300,表示添加或更新文件大小超过300MB,推送将被拒绝。管理员可以在0~300范围内修改值。 当用户变更套餐且配置的提交规则不变时,系统自动修改为当前套餐单文件大小限制。 二进制规则 非必填。 二进制规则默认不勾选,表示二进制文件默认可以上传【需满足单文件不超过上面设置的文件大小上限】。当“禁止新增二进制文件”被勾选时,“允许修改二进制文件”、“二进制文件白名单”、“特权用户”才生效。”允许修改二进制文件“勾选后,提交文件为modify状态的二进制文件不会拦截,可直接上传。二进制文件可以直接删除,不会进行二进制检查。 禁止新增二进制文件(对特权用户无效)。 允许修改二进制文件(对特权用户无效)。 二进制文件白名单(可直接入库的文件,限制2000个字符)。 特权用户(特权用户可直接推送所有二进制文件入库,特权用户上限为50人)。 说明: 具有推送权限的仓库成员可作为特权用户。 规则生效时间 非必填。 在生效日期之后创建的所有提交都必须与hook设置相匹配才能被推送。如果此字段为空,则无论提交日期如何,都将检查所有提交。 不推荐将二进制文件存放至代码托管仓库,会影响代码仓的性能和稳定性。 表4 常见正则表达式示例 规则 示例 单个a或b或c字符 [abc] 非a或b或c的字符 [^abc] 在a到z范围内的小写英语字母字符 [a-z] 在a到z范围外的字符 [^a-z] 在a到z或A到Z范围内的大小写英语字母字符 [a-zA-Z] 任意单个字符 . 选择 - 匹配 a 或 b a|b 任意空白字符 \s 非空白字符 \S 阿拉伯数字字符 \d 非阿拉伯数字字符 \D 字母、数字或下划线的字符 \w 非字母、数字或下划线的字符 \W 匹配括号中的内容(不捕获) (?:...) 匹配并捕获括号中的内容 (...) 零个或一个a a? 零个或更多a a* 一个及以上a a+ 三个a a{3} 三个a以上 a{3,} 3到6个a a{3,6} 文本开头 ^ 文本末尾 $ 单词边界 \b 非单词边界 \B 换行符 \n 回车符 \r 制表符 \t 空字符 \0
  • 前提条件 打开TortoiseGit官网下载链接,根据您的操作系统位数下载32位/64位的安装包。 双击运行安装包,在弹出的窗口中依次单击“Next”,然后单击“Install”即可完成安装,最后单击“Finish”即会运行第一次启动引导。 在弹出的第一次启动引导中,会有Language语言选择、Git可执行路径配置(自动填充可用的Git路径)、配置用户名和邮箱,保持默认依次单击Next完成即可。
  • 设置分支策略 单击“新建分支策略”按钮,可以为指定分支或该仓库下的全部分支设置合入策略。 仅审核机制支持设置分支策略,打分机制暂不支持。 分支策略优先级示例如下: 假设在仓库下有A策略与B策略,它们配置的分支相同,则系统默认使用最新创建的分支策略。 假设在仓库下有A策略与B策略,A策略配置的分支为a分支与b分支,B策略配置的分支为a分支,在发起目标分支为a分支的合并请求时,系统默认使用B策略。 在审核机制下未设置分支策略,则在发起合并请求时使用默认分支策略,该分支策略支持编辑、查看但不可删除,策略配置如下: 分支:*,默认全部分支且不可修改。 最小检视人数:默认为 0。 最小审核人数:默认为 0。 重置审核门禁:默认勾选。 重置检视门禁:默认勾选。 仅能从以下审核/检视人中追加审核人/检视人:默认不勾选。 开启流水线门禁:默认不勾选。 合并人:默认为空。 审核人:默认为空。 检视人:默认为空。 表4 字段说明 字段 说明 分支 可针对所有分支或某一分支进行设置策略。 最小检视人数 设置最少检视通过的人数,当检视通过的人数满足“最小检视人数”时,审核门禁通过。“0” 表示无需检视人检视通过,也可通过该门禁,但如果某检视人检视不通过,则该门禁显示不通过。 最小审核人数 设置最少审核通过的人数,当审核通过的人数满足“最小审核人数”时,审核门禁通过。“0” 表示无需审核人审核通过,也可通过该门禁,但如果某审核人审核不通过,则该门禁显示不通过。 重置审核门禁 当重新推送代码到MR的源分支时,将MR审核门禁重置。 重置检视门禁 当重新推送代码到MR的源分支时,将MR检视门禁重置。 仅能从以下审核人/检视人中追加审核人/检视人 勾选后,可配置“追加审核人”名单与“追加检视人”名单,当您想在“审核人”与“检视人”的必选名单外追加成员时,只允许从“追加审核人”名单与“追加检视人”名单中追加成员。 需要通过流水线门禁 勾选后,合并前需要满足流水线门禁都通过的条件,将CI融入代码开发流程。 合并人 可配置必选合并人名单,在新建合并请求时,该名单将自动同步至合并请求中。 审核人 可配置必选审核人名单,在新建合并请求时,该名单将自动同步至合并请求中。 检视人 可配置必选检视人名单,在新建合并请求时,该名单将自动同步至合并请求中。 必选名单举例: 最小审核人数为2人,如果必选审核人名单为空,追加审核人名单2人均审核通过,审核门禁通过。 最小审核人数为2人,如果必选审核人名单非空,则该名单内至少一人审核通过,审核门禁才可通过。
  • 合并模式 表3 字段说明 字段 说明 通过 merge commit 合并 勾选后,每次合并操作都会产生一个merge commit点,只要没有检测到冲突就能够执行合并操作。即不管基线点是不是最新的点,无冲突就可以合并。 Squash合并不产生Merge节点:勾选后,squash合并不会产生merge节点。 使用MR合入者生成Merge Commit :勾选后,可用于记录Commit信息。 使用MR创建者生成Merge Commit: 勾选后,可用于记录Commit信息。 通过 merge commit 合并(记录半线性历史) 勾选后,每次合并操作会记录一个merge commit提交,但是与“通过merge commit合并”不同,必须基于目标分支最新的commit提交点进行提交,否则会提示开发者进行rebase操作。这种合并模式下可以非常确定一点,如果merge request能够正确构建,合并完成后目标分支也能够正确构建。 Fast-forward 合并 勾选后,每次合并操作不会记录一个merge commit提交,且必须基于目标分支最新的commit提交点进行提交,否则会提示开发者进行rebase操作。
  • 合入机制 打分机制:包含代码检视,以打分为基础,可设置最低合入分值,分值范围为0~5分。只有分数和必选评审达到门禁条件时,代码才可以合入,勾选打分机制时需设置最低分值。 审核机制:包含代码检视和合并审核两个步骤,以通过人数为基础,只有审核通过的人数达到门禁条件时,代码才可以合入,勾选审核机制时建议设置分支策略。 合并请求默认为“审核机制”,可手动切换为“打分机制”。 切换合入机制后,会改变合并请求的工作流,但之前创建的合并请求仍保留之前的合入机制。
  • MR设置 表2 字段说明 字段 说明 禁止合入自己创建的合并请求 勾选后,您在查看自己创建的MR时,“合入”按钮置灰,自己无法合入,需要找其他有合入权限的人合入。 禁止审核自己创建的合并请求 勾选后,您在查看自己创建的MR时,“审核”按钮置灰,自己无法审核,需要找其他有审核权限的人审核。 禁止检视自己创建的合并请求 勾选后,您在查看自己创建的MR时,“检视”按钮置灰,自己无法检视,需要找其他有检视权限的人检视。 允许仓库管理员强制合入 管理员有强制合入的权限,当合入条件不满足,也可通过“强行合并”按钮合入MR。 允许合并请求合并后继续做代码检视和评论 勾选后,已合入MR可继续做代码检视、评论。 是否将自动合并的MR状态标记为关闭状态(如果B MR中的所有commits都包含在A MR中,那么当A MR合并后,则B MR会自动合并。默认B MR会标记为merged状态,可以通过该选项控制将B MR标记为Closed状态) 未勾选时,自动合并的MR被标记为已合并。 勾选后,自动合并的MR的状态将会标记为关闭状态。 不能重新打开一个已经关闭的合并请求 勾选后,当分支合并请求已经关闭后,不能将其重新置回“开启”状态,下图中页面右上方的“重开”按钮将隐藏。 此设置一般用于流程管控,使历史评审不会被篡改。 合并请求合入后,默认删除源分支 合并成功后,源分支将被删除。 已经设置成保护分支的源分支不会被删除。 此设置对历史合入请求,不会生效,不必担心启用此设置会丢失分支。 禁止Squash合并 勾选后,“Squash合并”按钮被禁止,且合并请求中无该功能使用入口。 新建合并请求,默认开启Squash合并 Squash合并是指Git在做两个分支间的合并时,会把被合并分支上的所有变更“压缩(squash)”成一个提交,追加到当前分支的后面作为“合并提交”(merge commit),可以使分支变得简洁。Squash合并和普通Merge合并唯一的区别体现在提交历史上:对于普通Merge而言,在当前分支上的合并提交通常会有两个提交信息;而Squash Merge只有一个提交信息。
  • 合入条件 表1 字段说明 字段 说明 评审问题全部解决才能合入 勾选后,如果评审意见被勾选为“这是一个需要被解决的问题”,则合入条件会提示“存在未解决的评审意见”且“合入”按钮置灰;如果只是一个普通的评审意见,则不存在“已解决”开关,也不会被合入条件拦截。 必须与CodeArts Req关联 只能关联一个单号:勾选后,一个MR只能关联一个单号。 所有E2E单号校验必须通过:勾选后,被关联的所有E2E单号校验必须通过。 选择分支配置合并请求策略:可添加多个分支配置合并请求策略,支持手动输入通配符匹配,按回车确认,如:*-stable或production/*。 是否将星级评价作为合入门禁 勾选后,星级评价功能入口开启,必须至少有一位Committer、项目经理、仓库所有者或项目管理员进行星级评价,否则星级评价不通过,则请求无法合入。
  • Windows Git Bash客户端 Windows Git Bash客户端 如果您不熟悉Git命令,推荐使用Windows TortoiseGit客户端的可视化操作界面,如果您熟悉常用的Git命令,Git Bash将会是您Windows上更加简洁、高效的客户端。 安装Git Bash客户端。 打开Git Bash官网下载链接,根据您的操作系统位数下载32位/64位的安装包。 双击运行安装包,在弹出的安装窗口中依次单击“下一步(Next)”,最后单击“安装(Install)”完成安装。 打开Git Bash客户端。 单击Windows“开始”图标,在“开始”搜索栏中输入“Git Bash”,单击回车即可打开Git Bash客户端,建议将其固定到Windows的任务栏中。 配置Git Bash客户端。 配置用户名和邮箱,在Git Bash中输入以下命令行: git config --global user.name 您的用户名 git config --global user.email 您的邮箱 配置好之后可以使用以下命令行查看配置: git config -l git config命令的--global参数,用了这个参数,表示您这台机器上所有的Git仓库都会使用这个配置,您也可以对某个仓库指定不同的用户名和Email地址。
  • 配置代码仓库的子模块设置 子模块(submodule)是Git为管理仓库共用而衍生出的一个工具,通过子模块您可以将公共仓库作为子目录包含到您的仓库中,并能够双向同步该公共仓库的代码,借助子模块您能将公共仓库隔离、复用,能随时拉取最新代码以及对它提交修复,能大大提高您的团队效率。 有种情况经常会遇到:某个工作中的项目A需要包含并使用项目B(第三方库,或者你独立开发的,用于多个父项目的库),如果想要把它们当做两个独立的项目,同时又想在项目A中使用项目B,可以使用Git的子模块功能。 子模块允许您将一个Git仓库作为另一个Git仓库的子目录。 它能让你将另一个仓库克隆到自己的项目中,同时还保持提交的独立。 子模块将被记录在一个名叫“.gitmodules”的文件中,其中会记录子模块的信息: [submodule "module_name"] #子模块名称 path = file_path #子模块在本仓库(父仓)中文件的存储路径。 url = repo_url #子模块(子仓库)的远程仓地址 这时,位于“file_path”目录下的源代码,将会来自“repo_url”。
  • SQL查询和子查询 GaussDB数据库 兼容除分层查询以外的SQL查询和子查询。 表1 SQL查询和子查询 序号 Oracle数据库 GaussDB 数据库 差异 1 创建简单查询 支持 - 2 分层查询 不支持 - 3 UNION [ALL],INTERSECT,减运算符 支持 - 4 查询结果排序 支持,有差异 GaussDB查询不包含分组,且目标列同时包含聚集函数和集合返回函数时,不忽略对集合返回函数列的排序。 5 Joins 支持,有差异 GaussDB只支持和Oracle相同的Join Types,如left、right、self 、natural、full outer join等。不支持In-Memory Join Groups等Join Optimizations方法。 6 使用子查询 支持 - 7 嵌套子查询的解嵌套 支持,有差异 GaussDB不支持显式指定HASH_AJ或MERGE_AJ。 8 分布式查询 支持,有差异 GaussDB需要显式DBLINK查询。 9 聚集函数嵌套 支持 - 父主题: 分布式版
  • 排序规则 GaussDB数据库支持指定模式、表或列的排序规则,支持的范围如下。 排序规则差异说明: 当前仅有字符串类型、部分二进制类型支持指定排序规则,其他类型不支持指定排序规则,可以通过查询pg_type系统表中类型的typcollation属性不为0来判断该类型支持字符序。MySQL中所有类型可以指定字符序,但除字符串、二进制类型其他排序规则无实际意义。 当前排序规则(除binary外)仅支持在其对应字符集与库级字符集一致时可以指定,GaussDB数据库中,字符集必须与数据库的字符集一致,且不支持表内多种字符集混合使用。 utf8mb4字符集下默认字符序为utf8mb4_general_ci,与MySQL5.7保持一致。 使用latin1字符序需要设置兼容性参数m_format_dev_version = 's2'。 表1 排序规则列表 序号 MySQL数据库 GaussDB数据库 1 utf8mb4_general_ci 支持 2 utf8mb4_unicode_ci 支持 3 utf8mb4_bin 支持 4 gbk_chinese_ci 支持 5 gbk_bin 支持 6 gb18030_chinese_ci 支持 7 gb18030_bin 支持 8 binary 支持 9 utf8mb4_0900_ai_ci 支持 10 utf8_general_ci 支持 11 utf8_bin 支持 12 utf8_unicode_ci 支持 13 latin1_swedish_ci 支持 14 latin1_bin 支持 父主题: MySQL数据库兼容性M-Compatibility模式
  • 获取结果集中的数据 ResultSet对象提供了丰富的方法,以获取结果集中的数据。获取数据常用的方法如表1所示,其他方法请参考JDK官方文档。 表1 ResultSet对象的常用方法 方法 描述 差异 int getInt(int columnIndex) 按列标获取int型数据。 - int getInt(String columnLabel) 按列名获取int型数据。 - String getString(int columnIndex) 按列标获取String型数据。 字段类型为整型且带有ZEROFILL属性时,GaussDB按照ZEROFILL属性要求的宽度信息用0进行补位后输出结果,MySQL直接输出结果。 String getString(String columnLabel) 按列名获取String型数据。 字段类型为整型且带有ZEROFILL属性时,GaussDB按照ZEROFILL属性要求的宽度信息用0进行补位后输出结果,MySQL直接输出结果。 Date getDate(int columnIndex) 按列标获取Date型数据。 - Date getDate(String columnLabel) 按列名获取Date型数据。 -
  • 产品优势 高安全 GaussDB拥有TOP级的商业数据库安全特性,如下所示,能够满足政企和金融级客户的核心安全诉求。 数据动态脱敏,行级访问控制,密态计算。 健全的工具与服务化能力 GaussDB已经拥有华为云,商用服务化部署能力,同时支持DAS、DRS等生态工具。有效保障用户开发、运维、优化、监控、迁移等日常工作需要。 全栈自研 GaussDB基于鲲鹏生态,是当前国内唯一能够做到全栈自主可控的国产品牌。同时GaussDB能够基于硬件优势在底层不断进行优化,提升产品综合性能。 开源生态 GaussDB已经支持开源社区,并提供集中式版本下载。
  • 字符串数据类型 表1 字符串数据类型 序号 MySQL数据库 GaussDB数据库 差异 1 CHAR(M) 支持,存在差异 输入格式: 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 2 VARCHAR(M) 支持,存在差异 输入格式: GaussDB的自定义函数参数和返回值不支持长度校验,存储过程参数不支持长度校验,MySQL支持。 GaussDB的自定义函数和存储过程中的临时变量支持长度校验以及严格宽松模式下的报错和截断告警,MySQL不支持。 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 3 TINYTEXT 支持,存在差异 输入格式: 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中TINYTEXT类型不支持主键,GaussDB支持。 索引:MySQL中TINYTEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 4 TEXT 支持,存在差异 输入格式: 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中TEXT类型不支持主键,GaussDB支持。 索引:MySQL中TEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 5 MEDIUMTEXT 支持,存在差异 输入格式: 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中MEDIUMTEXT类型不支持主键,GaussDB支持。 索引:MySQL中MEDIUMTEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 6 LONGTEXT 支持,存在差异 输入格式: GaussDB只支持不超过1G字节长度,MySQL支持4G-1字节长度。 默认值:创建表列时语法上允许设置默认值,MySQL不允许设置默认值。 输入二进制或十六进制字符串,GaussDB输出为十六进制,MySQL中根据ASCII码表转义,无法转义的输出为空。 主键:MySQL中LONGTEXT类型不支持主键,GaussDB支持。 索引:MySQL中LONGTEXT类型不支持除前缀索引外其他索引方法,GaussDB支持。 外键:MySQL中TINYTEXT类型不支持作为外键的参考列/被参考列,GaussDB支持。 父主题: 数据类型
  • 双冒号转换差异点 GaussDB中使用双冒号将函数入参转换为期望类型可能导致结果超出预期;MySQL中无双冒号功能。 示例: m_db=# SELECT POW("12"::VARBINARY,"12"::VARBINARY); ERROR: value out of range: overflow CONTEXT: referenced column: pow varbinary col m_db=# CREATE TABLE test_varbinary ( A VARBINARY(10) ); m_db=# INSERT INTO test_varbinary VALUES ('12'); m_db=# SELECT POW(A, A) FROM test_varbinary; pow --------------- 8916100448256 (1 row)
  • 静态SQL 表1 静态查询 SQL语句 序号 Oracle数据库 GaussDB数据库 差异 1 SELECT 支持,有差异 GaussDB和Oracle在某些场景下有不同。 GaussDB中FOR SHARE对检索出来的行加共享锁,不同事务的共享锁不会互相阻塞。若数据在一个事务中被FOR SHARE锁定,在另一个事务中使用SELECT FOR SHARE SKIP LOCKED时,SKIP LOCKED不会跳过锁。 表2 静态DML SQL语句 序号 Oracle数据库 GaussDB数据库 差异 1 INSERT 支持 - 2 UPDATE 支持 - 3 DELETE 支持 - 4 MERGE 支持 - 5 LOCK TABLE 支持 - 6 INSERT ALL 支持,有差异 Oracle不支持对into_clause的表设置别名,GaussDB支持。 into_clause指定sequence: Oracle:首次引用nextval会生成下一个数字,但所有非首次引用的nextval都将返回相同数字。 GaussDB:引用nextval生成的数字可以正常自增。 Oracle设置plan_hint语句可以正常生效,GaussDB不生效。 表3 静态TCL SQL语句 序号 Oracle数据库 GaussDB数据库 差异 1 COMMIT 支持 - 2 ROLLBACK 支持 - 3 SAVEPOINT 支持 - 4 SET TRANSACTION 支持,有差异 GaussDB不支持NAME string语法、USE ROLLBACK SEGMENT rollback_segment语法。 表4 伪列 序号 Oracle数据库 GaussDB数据库 差异 1 CURRVAL and NEXTVAL 支持 - 2 LEVEL 不支持 - 3 OBJECT_VALUE 不支持 - 4 ROWID 不支持 - 5 ROWNUM 支持,有差异 不推荐ROWNUM条件用于JOIN ON子句。 GaussDB中ROWNUM条件用于JOIN ON子句时在LEFT JOIN、RIGHT JOIN、FULL JOIN场景下和MERGE INTO场景下与其他数据库行为不一致,直接进行业务迁移存在风险。 表5 隐式游标属性 序号 Oracle数据库 GaussDB数据库 差异 1 SQL%FOUND 支持,有差异 GaussDB在commit\rollback之后不刷新隐式游标结果,Oracle会在commit\rollback之后刷新隐式游标结果。 2 SQL%NOTFOUND 支持,有差异 3 SQL%ROWCOUNT 支持,有差异 4 SQL%ISOPEN 支持,有差异 5 SQL%BULK_ROWCOUNT 不支持 6 SQL%BULK_EXCEPTIONS 不支持 表6 显式游标语法及关键字 序号 Oracle数据库 GaussDB数据库 差异 1 CURSOR cursor_name [ parameter_list ] RETURN return_type; 支持 - 2 CURSOR cursor_name [ parameter_list ] [ RETURN return_type ] IS select_statement; 支持 - 3 OPEN 支持 - 4 CLOSE 支持,有差异 GaussDB在exception内部会自动关闭,Oracle在exception内部不会自动关闭。 5 FETCH 支持 - 6 CURRENT OF CURSOR 支持 - 表7 显式游标属性 序号 Oracle数据库 GaussDB数据库 1 SQL%FOUND 支持 2 SQL%NOTFOUND 支持 3 SQL%ROWCOUNT 支持 4 SQL%ISOPEN 支持 表8 游标循环 序号 Oracle数据库 GaussDB数据库 1 FOR LOOP 支持 表9 自治事务支持场景 序号 Oracle数据库 GaussDB数据库 1 存储过程 支持 2 匿名块 支持 3 函数 支持 4 Package 支持 父主题: PL/SQL语言
  • 加密函数 表1 加密函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 AES_DECRYPT() 支持。 ecb为不安全加密模式,GaussDB不支持,默认为cbc模式。 GaussDB中,当指定数据库使用的字符编码是SQL_ASCII时,服务器把字节值0-127根据ASCII标准解释,而字节值128-255则当作无法解析的字符;如果该函数的输入输出包含了任何非ASCII数据,数据库将无法帮助你转换或者校验非ASCII字符。 MySQL的返回值类型为BINARY、VARBINARY、BLOB、MEDIUMBLOB、LONGBLOB,GaussDB返回值类型固定为LONGBLOB。 GUC参数 :block_encryption_mode不支持设置数字。 2 AES_ENCRYPT() 支持。 3 PASSWORD() 支持,有差异。 MySQL中可以通过GUC参数old_passwords控制生成密码的哈希方式: old_passwords的默认值为0。 old_passwords为0:表示使用MySQL 4.1 native hashing加密。 old_passwords为2:表示使用SHA-256 hashing加密。 GaussDB中没有实现GUC参数old_passwords,password函数的行为只与默认(即old_passwords为0)的行为保持一致。 当BINARY类型插入字符串长度小于目标长度时,GaussDB填充符和MySQL不同;因此入参为BINARY类型时,函数结果和MySQL不一致。 父主题: 系统函数
  • 身份认证 用户访问云数据库 GaussDB时支持对数据库用户进行身份验证,包含密码验证和 IAM 验证两种方式。 密码验证 您需要对数据库实例进行管理,使用数据管理服务(Data Admin Service)登录数据库时,需要对账号密码进行验证,验证成功后方可进行操作。 IAM验证 您可以使用 统一身份认证 服务(Identity and Access Management, IAM)进行精细的权限管理。该服务提供用户身份认证、权限分配、访问控制等功能,可以帮助您安全地控制华为云资源的访问。您创建的IAM用户,需要通过验证用户和密码才可以使用GaussDB资源。具体请参见创建IAM用户并登录。
  • 访问控制 权限控制 购买实例之后,您可以使用IAM为企业中的员工设置不同的访问权限,以达到不同员工之间的权限隔离,通过IAM进行精细的权限管理。具体内容请参见权限管理。 VPC和子网 虚拟私有云(Virtual Private Cloud, VPC)为云数据库构建隔离的、用户自主配置和管理的虚拟网络环境,提升用户云上资源的安全性,简化用户的网络部署。您可以在VPC中定义安全组、VPN、IP地址段、带宽等网络特性,方便管理、配置内部网络,进行安全、快捷的网络变更。 子网提供与其他网络隔离的、可以独享的网络资源,以提高网络安全性。 具体内容请参见创建虚拟私有云和子网。 安全组 安全组是一个逻辑上的分组,为同一个虚拟私有云内具有相同安全保护需求并相互信任的和GaussDB数据库实例提供访问策略。为了保障数据库的安全性和稳定性,在使用GaussDB数据库实例之前,您需要设置安全组,开通需访问数据库的IP地址和端口。 具体请参见设置安全组规则。
  • DDL 表1 DDL语法兼容介绍 序号 概述 详细语法说明 差异 1 建表和修改表时支持创建主键、UNIQUE索引 ALTER TABLE、CREATE TABLE GaussDB当前不支持UNIQUE INDEX|KEY index_name语法,使用UNIQUE INDEX|KEY index_name语法时会报错。MySQL支持。 当约束被建立为全局二级索引,SQL语句中指定using btree时,底层会建立为ubtree。 当约束关联的表为ustore,且SQL语句中指定为using btree时,底层会建立为ubtree。 2 支持前缀索引 CREATE INDEX 前缀长度不得超过2676,键值的实际长度受内部页面限制,若字段中含有多字节字符或者一个索引上有多个键,索引行长度可能会超限报错。 CREATE INDEX语法中,不支持以下关键字作为前缀键的字段名称:COALESCE、EXTRACT、GREATEST、LEAST、LNNVL、NULLIF、NVL、NVL2、OVERLAY、POSITION、REGEXP_LIKE、SUBSTRING、TIMESTAMPDIFF、TREAT、TRIM、XMLCONCAT、XMLELEMENT、XMLEXISTS、XMLFOREST、XMLPARSE、XMLPI、XMLROOT、XMLSERIALIZE。 主键和唯一键索引中不支持前缀键。 3 支持指定字符集与排序规则 ALTER SCHEMA、ALTER TABLE、 CREATE SCHEMA、CREATE TABLE - 4 创建分区表语法兼容 CREATE TABLE PARTITION - 5 建表和修改表时支持指定表级和列级comment CREATE TABLE、ALTER TABLE - 6 创建索引时支持指定索引级comment CREATE INDEX - 7 交换普通表和分区表分区的数据 ALTER TABLE PARTITION ALTER TABLE EXCHANGE PARTITION的差异点: MySQL表或分区使用tablespace时,则无法进行分区和普通表数据的交换;GaussDB表或分区使用不同的tablespace时,仍可进行分区和普通表数据的交换。 对于列默认值,MySQL不会校验默认值,因此默认值不同时也可进行分区和普通表数据的交换;GaussDB会校验默认值,如果默认值不同,则无法进行分区和普通表数据的交换。 MySQL在分区表或普通表上进行DROP列操作后,表结构仍然一致,则可进行分区和普通表数据的交换;GaussDB需要保证普通表和分区表的被删除列严格对齐才能进行分区和普通表数据的交换。 MySQL和GaussDB的哈希算法不同,所以两者在相同的hash分区存储的数据可能不一致,导致最后交换的数据也可能不一致。 MySQL的分区表不支持外键,普通表包含外键或其他表引用普通表的外键,则无法进行分区和普通表数据的交换;GaussDB的分区表支持外键,在两个表的外键约束一致时,则可进行分区和普通表数据的交换;GaussDB的分区表不带外键,普通表有其他表引用,如果分区表和普通表表一致,则可进行分区和普通表数据的交换。 8 支持自增列 ALTER TABLE、CREATE TABLE 目前仅支持各个DN独立自增的本地自动增长列。 自动增长列建议为索引(非全局二级索引)的第一个字段,否则建表时产生警告,含有自动增长列的表进行某些操作时会产生错误,例如:ALTERT TABLE EXCHANGE PARTITION。MySQL自动增长列必须为索引第一个字段。 AUTO_INCREMENT = value语法,value必须为小于2^127的正数。MySQL不校验value。 当自增值已经达到字段数据类型的最大值时,继续自增将产生错误。MySQL有些场景产生错误或警告,有些场景仍自增为最大值。 不支持innodb_autoinc_lock_mode系统变量,GaussDB的GUC参数auto_increment_cache=0时,批量插入自动增长列的行为与MySQL系统变量innodb_autoinc_lock_mode=1相似。 自动增长列在导入数据或者进行Batch Insert执行计划的插入操作时,对于混合0、NULL和确定值的场景,如果产生错误,后续插入自增值不一定与MySQL完全一致。 提供auto_increment_cache参数,可以控制预留自增值的数量。 批量插入在不同执行计划下,自增的顺序、自增值预留数量可能与MySQL不完全相同。例如:“INSERT INTO table VALUES(...),(...),...”由于要分布到不同DN,在某些执行计划中,DN获取不到即将插入的行数。 提供auto_increment_cache参数,可以控制预留自增值的数量。 并行导入或插入自动增长列触发自增时,每个并行线程预留的缓存值也只在其线程中使用,未完全使用完毕的话,也会出现表中自动增长列的值不连续的情况。并行插入产生的自增值结果无法保证与MySQL完全一致。 SERIAL数据类型为原有的自增列,与AUTO_INCREMENT自增列有差异。MySQL的SERIAL数据类型就是AUTO_INCREMENT自增列。 不允许auto_increment_offset的值大于auto_increment_increment的值,会产生错误。MySQL允许,并说明auto_increment_offset会被忽略。 在表有主键或索引的情况下,ALTER TABLE命令重写表数据的顺序与MySQL不一定相同,GaussDB按表数据存储顺序重写,MySQL会按主键或索引顺序重写,导致自增值的顺序可能不同。 ALTER TABLE命令添加或修改自增列时,第一次预留自增值的数量是表统计信息中的行数,统计信息的行数不一定与MySQL一致。 在触发器或用户自定义函数中自增时,刷新last_insert_id返回值。MySQL不刷新。 对GUC参数auto_increment_offset和auto_increment_increment设置超出范围的值会产生错误。MySQL会自动改为边界值。 暂不支持last_insert_id函数。 本地临时表暂不支持自动增长列。 sql_mode设置no_auto_value_on_zero参数,表定义的自动增长列为非NOT NULL约束,向表中插入数据不指定自动增长列的值时,GaussDB中自动增长列插入NULL值,且不触发自增;MySQL中自动增长列插入NULL值,触发自增。 9 支持删除表的主键约束 ALTER TABLE - 10 支持CREATE TABLE ... LIKE语法兼容 CREATE TABLE ... LIKE 在MySQL 8.0.16 之前的版本中,CHECK约束会被语法解析但功能会被忽略,表现为不复制CHECK约束,GaussDB支持复制CHECK约束。 对于set数据类型,在建表时,MySQL支持复制,GaussDB不支持复制。 对于主键约束名称,在建表时,MySQL所有主键约束名称固定为PRIMARY KEY,GaussDB不支持复制。 对于唯一键约束名称,在建表时,MySQL支持复制,GaussDB不支持复制。 对于CHECK约束名称,在建表时,MySQL 8.0.16 之前的版本无CHECK约束信息,GaussDB支持复制。 对于索引名称,在建表时,MySQL支持复制,GaussDB不支持复制。 在跨sql_mode模式建表时,MySQL受宽松模式和严格模式控制,GaussDB可能存在严格模式失效的情况。 例如:源表存在默认值“0000-00-00”,在“no_zero_date”严格模式下,GaussDB建表成功,且包含默认值“0000-00-00”,严格模式失效;而MySQL建表失败,受严格模式控制。 针对跨数据库创建表,MySQL支持,GaussDB不支持。 针对源表为临时表,创建非临时表,MySQL支持,GaussDB不支持。 11 支持更改表名兼容语法 ALTER TABLE[ IF EXISTS ] tbl_name RENAME [TO | AS | =] new_tbl_name; RENAME {TABLE | TABLES} tbl_name TO new_tbl_name [, tbl_name2 TO new_tbl_name2, ...]; GaussDB的alter rename语法仅支持修改表名称功能操作,不能耦合其它功能操作; GaussDB的仅旧表名字段支持如schema.table_name用法;且新表名与旧表名将属于同一Schema下; GaussDB的不支持新旧表跨Schema重命名操作;但如有权限,则可在当前Schema下修改其它Schema下表名称; GaussDB的rename多组表的语法支持全为本地临时表的重命名,不支持本地临时表和非本地临时表组合的场景。 12 支持增加子分区语法兼容 ALTER TABLE [ IF EXISTS ] { table_name [*] | ONLY table_name | ONLY ( table_name )} action [, ... ]; action: move_clause | exchange_clause | row_clause | merge_clause | modify_clause | split_clause | add_clause | drop_clause | ilm_clause add_clause: ADD {{partition_less_than_item | partition_start_end_item | partition_list_item} | PARTITION({partition_less_than_item | partition_start_end_item | partition_list_item})} 不支持ALTER TABLE table_name ADD PARTITION (partition_definition1, partition_definition1,…);语法添加多分区。 仅支持原有添加多分区语法:ALTER TABLE table_name ADD PARTITION (partition_definition1), ADD PARTITION (partition_definition2[y1] ), …;。 父主题: SQL
  • 责任共担 华为云秉承“将公司对网络和业务安全性保障的责任置于公司的商业利益之上”。针对层出不穷的 云安全 挑战和无孔不入的云安全威胁与攻击,华为云在遵从法律法规业界标准的基础上,以安全生态圈为护城河,依托华为独有的软硬件优势,构建面向不同区域和行业的完善云服务安全保障体系。 安全性是华为云与您的共同责任,如图1所示。 华为云:负责云服务自身的安全,提供安全的云。华为云的安全责任在于保障其所提供的 IaaS、PaaS 和 SaaS 类云服务自身的安全,涵盖华为云数据中心的物理环境设施和运行其上的基础服务、平台服务、应用服务等。这不仅包括华为云基础设施和各项云服务技术的安全功能和性能本身,也包括运维运营安全,以及更广义的安全合规遵从。 租户:负责云服务内部的安全,安全地使用云。 华为云租户的安全责任在于对使用的 IaaS、PaaS 和 SaaS 类云服务内部的安全以及对租户定制配置进行安全有效的管理,包括但不限于虚拟网络、 虚拟主机 和访客虚拟机的操作系统,虚拟防火墙、API 网关和高级安全服务,各项云服务,租户数据,以及身份账号和密钥管理等方面的安全配置。 《华为云安全白皮书》详细介绍华为云安全性的构建思路与措施,包括云安全战略、责任共担模型、合规与隐私、安全组织与人员、基础设施安全、租户服务与租户安全、工程安全、运维运营安全、生态安全。 图1 华为云安全责任共担模型 父主题: 安全
  • 静态SQL 表1 静态查询 SQL语句 序号 Oracle数据库 GaussDB数据库 差异 1 SELECT 支持,有差异 GaussDB和Oracle在某些场景下有不同。 GaussDB中不同事务中的共享锁在如下场景中不会互相阻塞: SELECT FOR SHARE - SELECT FOR SHARE; SELECT FOR SHARE - SELECT FOR KEY SHARE; SELECT FOR KEY SHARE - SELECT FOR KEY SHARE; SELECT FOR KEY SHARE - SELECT FOR NO KEY UPDATE; 上述场景中,由于锁与锁之间未阻塞,对在其他事务中存在非阻塞锁的数据指定SKIP LOCKED时,锁不会被跳过。 表2 静态DML SQL语句 序号 Oracle数据库 GaussDB数据库 差异 1 INSERT 支持 - 2 UPDATE 支持 - 3 DELETE 支持 - 4 MERGE 支持 - 5 LOCK TABLE 支持 - 6 INSERT ALL 支持,有差异 Oracle不支持对into_clause的表设置别名,GaussDB支持。 into_clause指定sequence: Oracle:首次引用nextval会生成下一个数字,但所有非首次引用的nextval都将返回相同数字。 GaussDB:引用nextval生成的数字可以正常自增。 Oracle设置plan_hint语句可以正常生效,GaussDB不生效。 表3 静态TCL SQL语句 序号 Oracle数据库 GaussDB数据库 差异 1 COMMIT 支持 - 2 ROLLBACK 支持 - 3 SAVEPOINT 支持 - 4 SET TRANSACTION 支持,有差异 GaussDB不支持NAME string语法、USE ROLLBACK SEGMENT rollback_segment语法。 表4 伪列 序号 Oracle数据库 GaussDB数据库 差异 1 CURRVAL and NEXTVAL 支持 - 2 LEVEL 支持 - 3 OBJECT_VALUE 不支持 - 4 ROWID 不支持 - 5 ROWNUM 支持,有差异 不推荐ROWNUM条件用于JOIN ON子句。GaussDB中ROWNUM条件用于JOIN ON子句时在LEFT JOIN、RIGHT JOIN、FULL JOIN场景下和MERGE INTO场景下与其他数据库行为不一致,直接进行业务迁移存在风险。 表5 隐式游标属性 序号 Oracle数据库 GaussDB数据库 差异 1 SQL%FOUND 支持,有差异 GaussDB在commit\rollback之后不刷新隐式游标结果,Oracle会在commit\rollback之后刷新隐式游标结果。 2 SQL%NOTFOUND 支持,有差异 3 SQL%ROWCOUNT 支持,有差异 4 SQL%ISOPEN 支持,有差异 5 SQL%BULK_ROWCOUNT 不支持 6 SQL%BULK_EXCEPTIONS 支持,有差异 表6 显式游标语法及关键字 序号 Oracle数据库 GaussDB数据库 差异 1 CURSOR cursor_name [ parameter_list ] RETURN return_type; 支持 - 2 CURSOR cursor_name [ parameter_list ] [ RETURN return_type ] IS select_statement; 支持 - 3 OPEN 支持 - 4 CLOSE 支持,有差异 GaussDB在exception内部会自动关闭,Oracle在exception内部不会自动关闭。 5 FETCH 支持 - 6 CURRENT OF CURSOR 支持 - 表7 显式游标属性 序号 Oracle数据库 GaussDB数据库 1 SQL%FOUND 支持 2 SQL%NOTFOUND 支持 3 SQL%ROWCOUNT 支持 4 SQL%ISOPEN 支持 表8 游标循环 序号 Oracle数据库 GaussDB数据库 1 FOR LOOP 支持 表9 自治事务支持场景 序号 Oracle数据库 GaussDB数据库 1 存储过程 支持 2 匿名块 支持 3 函数 支持 4 Package 支持 父主题: PL/SQL语言
  • 比较函数 表1 比较函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 COALESCE() 支持,有差异。 union distinct场景下,返回值精度与MySQL不完全一致。 当第一个不为NULL的参数的后续参数表达式中存在隐式类型转换错误时,MySQL会忽略该错误,GaussDB会提示类型转换错误。当参数为MIN函数、MAX函数时,返回值类型与MySQL不一致。 2 INTERVAL() 支持。 - 3 GREATEST() 支持,有差异。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 当该函数入参含有NULL且在WHERE关键字之后调用,返回结果与MySQL5.7不一致,此处为MySQL5.7存在的问题,MySQL8.0修复了该问题,目前GaussDB和MySQL8.0保持一致。 4 LEAST() 支持,有差异。 当MySQL返回值类型为二进制字符串类型(BINARY、VARBINARY、BLOB等)时,GaussDB对应的返回值类型为LONGBLOB;当MySQL返回值类型为非二进制字符串类型(CHAR、VARCHAR、TEXT等)时,GaussDB对应的返回值类型为TEXT。 当该函数入参含有NULL且在WHERE关键字之后调用,返回结果与MySQL5.7不一致,此处为MySQL5.7存在的问题,MySQL8.0修复了该问题,目前GaussDB和MySQL8.0保持一致。 5 ISNULL() 支持,有差异。 函数返回值类型在MySQL5.7和MySQL8.0中存在差异,结合MySQL8.0的行为更为合理,因此函数返回值类型兼容MySQL8.0。 内层嵌套部分聚合函数时,部分场景返回结果MySQL5.7和MySQL8.0中存在差异,结合MySQL8.0的行为更为合理,因此函数返回值兼容MySQL8.0。 m_db=# SELECT isnull(avg(1.23)); ?column? ---------- f (1 row) m_db=# SELECT isnull(group_concat(1.23)); ?column? ---------- f (1 row) m_db=# SELECT isnull(max('1.23')); ?column? ---------- f (1 row) m_db=# SELECT isnull(min(1/2)); ?column? ---------- f (1 row) m_db=# SELECT isnull(std(3.14159 * 1.2345)); ?column? ---------- f (1 row) m_db=# SELECT isnull(sum('0.23400')); ?column? ---------- f (1 row) 父主题: 系统函数
  • 流量控制函数 表1 流量控制函数列表 序号 MySQL数据库 GaussDB数据库 差异 1 IF() 支持 expr1入参仅支持bool类型。非bool类型入参若不能转换为bool类型则报错。 若expr2、expr3两入参类型不同且两类型间不存在隐式转换函数则报错。 两入参类型相同时,返回该入参类型。 若expr2、expr3两入参类型分别为NUMERIC、STRING或TIME其中一个时,输出为text类型,MySQL输出为varchar类型。 2 IFNULL() 支持 若expr1、expr2两入参类型不同且两类型间不存在隐式转换函数则报错。 两入参类型相同时,返回该入参类型。 若expr1、expr2两入参类型范畴分别为NUMEIRC、STRING或TIME其中一个时,输出为text类型,MySQL输出为varchar类型。 两入参类型第一个入参为float4,另一个为bigint或unsigned bigint时返回double类型,MySQL返回float类型。 3 NULLIF() 支持 GaussDB中NULLIF()类型推导遵从以下逻辑: 如果两个参数的数据类型不同,且两入参类型存在等值比较操作符,则返回对应等值操作符对应的左值类型,否则会对两入参类型进行强制类型兼容。 若强制类型兼容后,存在等值比较操作符,则返回强制类型兼容后对应等值操作符的左值类型。 若强制类型兼容后,仍找不到对应等值操作符,则报错。 --两入参类型存在等值比较操作符 gaussdb=# select pg_typeof(nullif(1::int2, 2::int8)); pg_typeof ----------- smallint (1 row) --两入参类型不存在等值比较操作符,但在强制类型兼容后可以找到等值比较操作符 gaussdb=# select pg_typeof(nullif(1::int1, 2::int2)); pg_typeof ----------- bigint (1 row) --两入参类型不存在等值比较操作符,且强制类型兼容后也不存在等值比较操作符 gaussdb=# SELECT nullif(1::bit, '1'::MONEY); ERROR: operator does not exist: bit = money LINE 1: SELECT nullif(1::bit, '1'::MONEY); ^ HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts. CONTEXT: referenced column: nullif MySQL输出类型仅与第一个入参类型有关: 第一个入参为tinyint、smallint、mediumint、int、bool时,输出为int类型。 第一个入参为bigint时,输出为bigint类型。 第一个入参为unsigned tinyint、unsigned smallint、unsigned mediumint、unsigned int、bit时,输出为unsigned int类型。 第一个入参为unsigned bigint时,输出为unsigned bigint。 第一个入参为浮点型即float、double、real时,输出为double类型。 第一个入参类型为decimal或numeric类型时,输出为decimal类型。 第一个入参类型为时间类型或字符串类型即date、time、date、datetime、timestamp、char、varchar以及tinytext、enum、set时,输出为varchar类型。 第一个入参类型为text、mediumtext、longtext时,输出为longtext类型。 第一个入参类型为tinyblob时,输出为varbinary类型。 第一个入参类型为mediumblob或longblob时,输出为longblob类型。 第一个入参为blob时,输出为blob类型。 4 ISNULL() 支持 GaussDB中返回值为boolean类型的t或f,MySQL中返回值为int类型的1或0。 父主题: 系统函数
  • 系统视图 GaussDB数据库兼容了部分Oracle数据库的系统视图,兼容的详细列表如下。 更多系统视图的字段说明信息请参考《开发指南》中“系统视图”章节。 表1 系统视图支持列表 序号 Oracle数据库 GaussDB数据库 1 ALL_ALL_TABLES DB_ALL_TABLES 2 ALL_COL_PRIVS DB_COL_PRIVS 3 ALL_COLL_TYPES DB_COLL_TYPES 4 ALL_IND_COLUMNS DB_IND_COLUMNS 5 ALL_COL_COMMENTS DB_COL_COMMENTS 6 ALL_CONS_COLUMNS DB_CONS_COLUMNS 7 ALL_CONSTRAINTS DB_CONSTRAINTS 8 ALL_DEPENDENCIES DB_DEPENDENCIES 9 ALL_DIRECTORIES DB_DIRECTORIES 10 ALL_IND_EXPRESSIONS DB_IND_EXPRESSIONS 11 ALL_IND_PARTITIONS DB_IND_PARTITIONS 12 ALL_INDEXES DB_INDEXES 13 ALL_IND_SUBPARTITIONS DB_IND_SUBPARTITIONS 14 ALL_OBJE CTS DB_OBJECTS 15 ALL_PART_COL_STATIS TICS DB_PART_COL_STATISTI CS 16 ALL_PART_KEY_COLUMNS DB_PART_KEY_COLUMNS 17 ALL_PART_TABLES DB_PART_TABLES 18 ALL_SCHEDULER_JOB_ARGS DB_SCHEDULER_JOB_ARGS 19 ALL_SCHEDULER_PROG RAM _ARGS DB_SCHEDULER_PROGRAM_ARGS 20 ALL_SEQUEN CES DB_SEQUENCES 21 ALL_SUBPART_KEY_COLUMNS DB_SUBPART_KEY_COLUMNS 22 ALL_SYNONYMS DB_SYNONYMS 23 ALL_TAB_COL_STATISTICS DB_TAB_COL_STATISTICS 24 ALL_TAB_COMMENTS DB_TAB_COMMENTS 25 ALL_TAB_HISTOGRAMS DB_TAB_HISTOGRAMS 26 ALL_TAB_STATS_HISTORY DB_TAB_STATS_HISTORY 27 ALL_TYPES DB_TYPES 28 ALL_PROCEDURES DB_PROCEDURES 29 ALL_SOURCE DB_SOURCE 30 ALL_TAB_COLUMNS DB_TAB_COLUMNS 31 ALL_TAB_PARTITIONS DB_TAB_PARTITIONS 32 ALL_TAB_SUBPARTITIONS DB_TAB_SUBPARTITIONS 33 ALL_TABLES DB_TABLES 34 ALL_TRIGGERS DB_TRIGGERS 35 ALL_USERS DB_USERS 36 ALL_VIEWS DB_VIEWS 37 DBA_AUDIT_OBJECT ADM_AUDIT_OBJECT 38 DBA_AUDIT_SESSION ADM_AUDIT_SESSION 39 DBA_AUDIT_STATEMENT ADM_AUDIT_STATEMENT 40 DBA_AUDIT_TRAIL ADM_AUDIT_TRAIL 41 DBA_COL_COMMENTS ADM_COL_COMMENTS 42 DBA_COL_PRIVS ADM_COL_PRIVS 43 DBA_COLL_TYPES ADM_COLL_TYPES 44 DBA_ARGUMENTS ADM_ARGUMENTS 45 DBA_CONSTRAINTS ADM_CONSTRAINTS 46 DBA_DATA_FILES ADM_DATA_FILES 47 DBA_CONS_COLUMNS ADM_CONS_COLUMNS 48 DBA_DEPENDENCIES ADM_DEPENDENCIES 49 DBA_DIRECTORIES ADM_DIRECTORIES 50 DBA_PART_COL_STATISTICS ADM_PART_COL_STATISTICS 51 DBA_PART_TABLES ADM_PART_TABLES 52 DBA_ROLE_PRIVS ADM_ROLE_PRIVS 53 DBA_ROLES ADM_ROLES 54 DBA_SCHEDULER_JOB_ARGS ADM_SCHEDULER_JOB_ARGS 55 DBA_SCHEDULER_PROGRAMS ADM_SCHEDULER_PROGRAMS 56 DBA_SCHEDULER_PROGRAM_ARGS ADM_SCHEDULER_PROGRAM_ARGS 57 DBA_HIST_SNAPSHOT ADM_HIST_SNAPSHOT 58 DBA_HIST_SQL_PLAN ADM_HIST_SQL_PLAN 59 DBA_HIST_SQLSTAT ADM_HIST_SQLSTAT 60 DBA_HIST_SQLTEXT ADM_HIST_SQLTEXT 61 DBA_ILMDATAMOVEMENTPOLICIES GS_ADM_ILMDATAMOVEMENTPOLICIES 62 DBA_ILMEVALUATIONDETAILS GS_ADM_ILMEVALUATIONDETAILS 63 DBA_ILMOBJECTS GS_ADM_ILMOBJECTS 64 DBA_ILMPARAMETERS GS_ADM_ILMPARAMETERS 65 DBA_ILMPOLICIES GS_ADM_ILMPOLICIES 66 DBA_ILMRESULTS GS_ADM_ILMRESULTS 67 DBA_ILMTASKS GS_ADM_ILMTASKS 68 DBA_IND_COLUMNS ADM_IND_COLUMNS 69 DBA_IND_EXPRESSIONS ADM_IND_EXPRESSIONS 70 DBA_IND_PARTITIONS ADM_IND_PARTITIONS 71 DBA_INDEXES ADM_INDEXES 72 DBA_OBJECTS ADM_OBJECTS 73 DBA_PART_INDEXES ADM_PART_INDEXES 74 DBA_PROCEDURES ADM_PROCEDURES 75 DBA_SCHEDULER_JOBS ADM_SCHEDULER_JOBS 76 DBA_SCHEDULER_RUNNING_JOBS ADM_SCHEDULER_RUNNING_JOBS 77 DBA_SEGMENTS ADM_SEGMENTS 78 DBA_SEQUENCES ADM_SEQUENCES 79 DBA_SOURCE ADM_SOURCE 80 DBA_IND_SUBPARTITIONS ADM_IND_SUBPARTITIONS 81 DBA_SUBPART_KEY_COLUMNS ADM_SUBPART_KEY_COLUMNS 82 DBA_SYS_PRIVS ADM_SYS_PRIVS 83 DBA_TAB_COL_STATISTICS ADM_TAB_COL_STATISTICS 84 DBA_TAB_HISTOGRAMS ADM_TAB_HISTOGRAMS 85 DBA_TAB_STATISTICS ADM_TAB_STATISTICS 86 DBA_TAB_STATS_HISTORY ADM_TAB_STATS_HISTORY 87 DBA_TABLESPACES ADM_TABLESPACES 88 DBA_TYPES ADM_TYPES 89 DBA_USERS ADM_USERS 90 DBA_SYNONYMS ADM_SYNONYMS 91 DBA_TAB_COLS ADM_TAB_COLS 92 DBA_TAB_COLUMNS ADM_TAB_COLUMNS 93 DBA_TAB_COMMENTS ADM_TAB_COMMENTS 94 DBA_TABLES ADM_TABLES 95 DBA_TAB_PARTITIONS ADM_TAB_PARTITIONS 96 DBA_TAB_SUBPARTITIONS ADM_TAB_SUBPARTITIONS 97 DBA_TRIGGERS ADM_TRIGGERS 98 DBA_TYPE_ATTRS ADM_TYPE_ATTRS 99 DBA_VIEWS ADM_VIEWS 100 ROLE_ROLE_PRIVS ROLE_ROLE_PRIVS 101 ROLE_SYS_PRIVS ROLE_SYS_PRIVS 102 ROLE_TAB_PRIVS ROLE_TAB_PRIVS 103 USER_COL_COMMENTS MY_COL_COMMENTS 104 USER_COL_PRIVS MY_COL_PRIVS 105 USER_COLL_TYPES MY_COLL_TYPES 106 USER_CONSTRAINTS MY_CONSTRAINTS 107 USER_DEPENDENCIES MY_DEPENDENCIES 108 DICT DICT 109 DICTIONARY DICTIONARY 110 DUAL DUAL 111 NLS_DATABASE_PARAMETERS NLS_DATABASE_PARAMETERS 112 NLS_INSTANCE_PARAMETERS NLS_INSTANCE_PARAMETERS 113 PLAN_TABLE PLAN_TABLE 114 USER_ILMDATAMOVEMENTPOLICIES GS_MY_ILMDATAMOVEMENTPOLICIES 115 USER_ILMEVALUATIONDETAILS GS_MY_ILMEVALUATIONDETAILS 116 USER_ILMOBJECTS GS_MY_ILMOBJECTS 117 USER_ILMPOLICIES GS_MY_ILMPOLICIES 118 USER_ILMRESULTS GS_MY_ILMRESULTS 119 USER_ILMTASKS GS_MY_ILMTASKS 120 USER_IND_COLUMNS MY_IND_COLUMNS 121 USER_IND_EXPRESSIONS MY_IND_EXPRESSIONS 122 USER_IND_PARTITIONS MY_IND_PARTITIONS 123 USER_IND_SUBPARTITIONS MY_IND_SUBPARTITIONS 124 USER_INDEXES MY_INDEXES 125 USER_JOBS MY_JOBS 126 USER_OBJECTS MY_OBJECTS 127 USER_PART_COL_STATISTICS MY_PART_COL_STATISTICS 128 USER_PART_INDEXES MY_PART_INDEXES 129 USER_PART_TABLES MY_PART_TABLES 130 USER_PROCEDURES MY_PROCEDURES 131 USER_SCHEDULER_JOB_ARGS MY_SCHEDULER_JOB_ARGS 132 USER_SCHEDULER_PROGRAM_ARGS MY_SCHEDULER_PROGRAM_ARGS 133 USER_SEQUENCES MY_SEQUENCES 134 USER_SOURCE MY_SOURCE 135 USER_SUBPART_KEY_COLUMNS MY_SUBPART_KEY_COLUMNS 136 USER_SYNONYMS MY_SYNONYMS 137 USER_SYS_PRIVS MY_SYS_PRIVS 138 USER_TAB_COL_STATISTICS MY_TAB_COL_STATISTICS 139 USER_TAB_COLUMNS MY_TAB_COLUMNS 140 USER_TAB_COMMENTS MY_TAB_COMMENTS 141 USER_TAB_HISTOGRAMS MY_TAB_HISTOGRAMS 142 USER_TAB_PARTITIONS MY_TAB_PARTITIONS 143 USER_TAB_STATISTICS MY_TAB_STATISTICS 144 USER_TAB_STATS_HISTORY MY_TAB_STATS_HISTORY 145 USER_TABLES MY_TABLES 146 USER_TABLESPACES MY_TABLESPACES 147 USER_TRIGGERS MY_TRIGGERS 148 USER_TYPE_ATTRS MY_TYPE_ATTRS 149 USER_TYPES MY_TYPES 150 USER_VIEWS MY_VIEWS 151 V$NLS_PARAMETERS V$NLS_PARAMETERS 152 V$SESSION_WAIT V$SESSION_WAIT 153 V$SYSSTAT V$SYSSTAT 154 V$SYSTEM_EVENT V$SYSTEM_EVENT 155 V$VERSION V$VERSION 156 V$INSTANCE V_INSTANCE 157 GV$INSTANCE GV_INSTANCE 158 V$MYSTAT V_MYSTAT 159 V$SESSION V_SESSION 160 GV$SESSION GV_SESSION 161 V$SESSION_LONGOPS DV_SESSION_LONGOPS 162 V$SESSION DV_SESSIONS 163 ALL_ARGUMENTS DB_ARGUMENTS 164 USER_CONS_COLUMNS MY_CONS_COLUMNS 165 USER_PART_KEY_COLUMNS MY_PART_KEY_COLUMNS 166 USER_ROLE_PRIVS MY_ROLE_PRIVS 167 DBA_TAB_PRIVS ADM_TAB_PRIVS 168 USER_SCHEDULER_JOBS MY_SCHEDULER_JOBS 169 V$LOCK V$LOCK 170 V$DBLINK V$DBLINK 171 V$GLOBAL_TRANSACTION V$GLOBAL_TRANSACTION 172 V$OPEN_CURSOR V$OPEN_CURSOR 173 V$GLOBAL_OPEN_CURSOR V$GLOBAL_OPEN_CURSOR 174 ALL_TAB_PRIVS DB_TAB_PRIVS 175 ALL_TAB_MODIFICATIONS DB_TAB_MODIFICATIONS 176 USER_TAB_MODIFICATIONS MY_TAB_MODIFICATIONS 177 USER_AUDIT_TRAIL MY_AUDIT_TRAIL 父主题: 分布式版
共100000条