为应对同构/异构数据库迁移通常面临的挑战,GBase 8c从数据库自身兼容性、配套工具兼容性等多方面进行设计优化,在内核本身的适配能力和性能基础上,兼容Oracle,PostgreSQL,MySQL,Teradata等多种关系型数据库,并且提供完善的SQL支持和丰富的函数库。下面以常用关系型数据库的相关语法做简单介绍

 

库级兼容性:

  • DBCOMPATIBILITY [ = ] compatibility_type
    指定兼容的数据库的类型,默认兼容O。
    取值范围:A、B、C、PG。分别表示兼容O、MY、TD和POSTGRES。

       注意:

                1.该参数只能建库时确定好,后期无法直接通过sql语句修改兼容性;

                2.A模式下,数据库将空字符串作为NULL处理,数据类型DATE会被替换为TIMESTAMP(0) WITHOUT TIME ZONE。

示例:

CREATE DATABASE 数据库名 WITH  ENCODING = 'UTF8' DBCOMPATIBILITY = 'A' OWNER 用户名;

 

1.兼容Oracle

CREATE DATABASE oracle WITH  ENCODING = 'UTF8' DBCOMPATIBILITY = 'A' OWNER test;

CREATE TABLE users (
  id NUMBER PRIMARY KEY,
  username VARCHAR2(50) NOT NULL,
  email VARCHAR2(100) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  );

CREATE UNIQUE INDEX idx_users_username ON users(username);

insert into users values(1,'张三','11111@qq.com');
select * from users;
 

GBase 8c 兼容模式使用说明_8c

2.兼容PostgreSQL

       注意:

                1.PG模式下,CHAR和VARCHAR以字符为计数单位,其它兼容性以字节为计数单位。例如,对于UTF-8字符集,CHAR(3)在PG兼容性下能存放3个中文字符,而在其它兼容性下只能存放1个中文字符。

CREATE DATABASE pg WITH  ENCODING = 'UTF8' DBCOMPATIBILITY = 'PG' OWNER test;

CREATE TABLE postgres (
  id INT PRIMARY KEY,
  data VARCHAR(100)
  ;
 
CREATE SEQUENCE postgres_id_seq START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;
ALTER TABLE postgres ALTER COLUMN id SET DEFAULT nextval('postgres_id_seq');

pg=# select nextval('postgres_id_seq');
nextval
---------
      1
(1 row)

pg=# select nextval('postgres_id_seq');
nextval
---------
      2
(1 row)

 

insert into postgres(data) values('11acb'),('222ABC');
select * from postgres;
 

GBase 8c 兼容模式使用说明_mysql_02

3.兼容MySQL

       注意:

                1.将字符串转换成整数类型时,如果输入不合法,B兼容性会将输入转换为0,而其它兼容性则会报错。

 

CREATE DATABASE mysql WITH  ENCODING = 'UTF8' DBCOMPATIBILITY = 'B' OWNER test;
 \c mysql

CREATE TABLE mytable (
  id INT AUTO_INCREMENT PRIMARY KEY,
  name VARCHAR(100)
   ;

INSERT INTO mytable (name) VALUES ('John');
SELECT LAST_INSERT_ID();
last_insert_id
----------------
             1
(1 row)

SELECT * from  mytable;
 id | name
----+------
 1 | John
 

GBase 8c 兼容模式使用说明_mysql_03

 

另外呢,GBase 8c在mysql兼容模式下,也支持mysql内置函数

LEAST(expr1, expr2, expr3, …) 返回列表中的最小值 

GBase 8c 兼容模式使用说明_数据库_04

LOG(x) 返回自然对数(以 e 为底的对数)

GBase 8c 兼容模式使用说明_8c_05

POW(x,y)/POWER(x,y)返回 x 的 y 次方

GBase 8c 兼容模式使用说明_数据库_06

CONCAT(s1,s2…sn)字符串 s1,s2 等多个字符串合并为一个字符串

GBase 8c 兼容模式使用说明_数据库_07

FIND_IN_SET  回在字符串s2中与s1匹配的字符串的位置

GBase 8c 兼容模式使用说明_字符串_08

FORMAT(x,n)函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入

GBase 8c 兼容模式使用说明_字符串_09