为应对同构/异构数据库迁移通常面临的挑战,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,'张三','[email protected]');
select * from users;
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;
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兼容模式下,也支持mysql内置函数
LEAST(expr1, expr2, expr3, …) 返回列表中的最小值
LOG(x) 返回自然对数(以 e 为底的对数)
POW(x,y)/POWER(x,y)返回 x 的 y 次方
CONCAT(s1,s2…sn)字符串 s1,s2 等多个字符串合并为一个字符串
FIND_IN_SET 回在字符串s2中与s1匹配的字符串的位置
FORMAT(x,n)函数可以将数字 x 进行格式化 “#,###.##”, 将 x 保留到小数点后 n 位,最后一位四舍五入
标签:兼容性,postgres,8c,CREATE,数据库,GBase,兼容,id From: https://blog.51cto.com/u_17026136/12063141