人大金仓数据库与mysql比较

简介

人大金仓数据库是基于 PostgreSQL 开发的。

SQL语言

语法

关键字

KES:

MYSQL:

语句

*特性MYSQLKES
字符串字面量单引号(')或 双引号(")'
十六进制字面量0x5461626c65X'5461626c65'/
BIT字面量b'1000001',0b1000001/
Boolean字面量常数TRUEFALSE分别取值为1和0。true/false/null
字符串内单引号转义'Don\'t''Don''t'
字段引起来反引号双引号 "Col"
转义字符\不需要转义,单引号内
运算符
特性MYSQLKES
除法/DIV (DIV是整除,/ 是包含小数的)/ 整数除
取余%MOD%
*字符串连接CONCAT(,,,)`
赋值运算符:= (存储过程中) ,= (SET 语句中):=
属性标识%
*字符串分隔符单引号(')或 双引号(")'
标签分隔符<< , >>
带引号的标识符分隔符"
范围运算符..
关系运算符(不相等)<>, !=<>!=^=
取反逻辑运算符NOT, !NOT
或 逻辑运算符OR, `
异或逻辑运算符XOR
并 逻辑运算符AND, &&AND
*异或 位 运算符^幂运算 pow(a,b)
取反 位 运算符~~
或 位运算符``
并 位 运算符&&

KES参考:http://help.kingbase.com.cn/v8/development/sql-plsql/plsql/plsql-plsql-language-fundamentals.html?highlight=%E8%BF%90%E7%AE%97%E7%AC%A6

MYSQL参考:https://dev.mysql.com/doc/refman/8.0/en/non-typed-operators.html

数据类型

分类类型MysqlKES差异
整数tintyinttintyinttinyintKES不能是无符号的
smallintsmallintsmallintKES不能是无符号的
mediumintmediumintmiddleint mediumint int3不建议使用
intintINTEGER/INTKES不能是无符号的
bigintbigintBIGINTKES不能是无符号的
小数单精度floatREAL / FLOAT§当fload的p取值为 1-24 时,与 REAL 相同。取值范围不一致。
双精度doubleDOUBLE PRECISION / FLOAT§当fload的p取值为 25-53 时,与 DOUBLE PRECISION 相同。取值范围不一致。
精确值decimal(precision, scale)DECIMAL(precision, scale)
NUMERIC(precision, scale)
precision, scale 取值范围不一致。
MYSQL: 0<=precision<=65, 0<=scale<=30。
KES:0<=precision<=1000, 0<=scale<=1000
日期和时间仅日期date/KES中DATE类型是包括日期和时间的
仅时间timeTIMEKES的是可以带时区的
年份year/
日期加时间datetimeDATE
时间戳timestampTIMESTAMPKES的是可以区分标准时区与本地时区
间隔interval [ fields] [(’p’)]MYSQL 在date函数中会使用INTERVAL 语法
字符串定长char(m)character(n [char | byte])
char(n [char | byte])
char(n [char | byte])
mysql:0-255字节
KES:n 缺省值为 1。最大长度是 10485760 个字节或者字符。char 或 byte 的默认值由。NLS_LENGTH_SEMANTICS 确定。
变长varchar(m)character varying[(n [char | byte])])
varchar(n [char | byte])
varchar2(n [char | byte])
nvarchar2(n [char | byte])
nvarchar(n [char | byte])
MYSQL:0-65535 字节
KES:n 取值最小为 1 字节或 1 字符,最大 10485760 字节或字符。n 缺省值为 1。char 或 byte 的默认值由NLS_LENGTH_SEMANTICS 确定。(n 可以取’*’, 表示不限制长度)
NVARCHAR表示是Unicode编码。
tinyblob,tinytext/
blob,text/KES中TEXT与MYSQL中TEXT的定义意义不一样。
mediumblob/
mediumtext/
无限变长longblob,longtextTEXTMYSQL:限制为2^32 - 1
KES:限制为1G(2^30)
大对象类型变长的二进制大对象/BLOBMYSQL中BLOB的长度限制为65535。
KES最大为1G。
变长字符大对象/CLOBKES:最大为1G。
变长字符大对象/NCLOBKES:最大为1G。unicode编码
位类型定长位类型bitBIT[(n)]
变长位类型/BIT VAYRING(n)
定长二进制binary(n)/
变长二进制串varbinary(n)BYTEAMYSQL:最大4G。
KES:变长二进制串, 长度最大为 1G
布尔类型/BooleanMysql用 tinyint代替,在jdbc中有差异。
KES中可取值:true/false。
序数类型/smallserial
/serial
/bigserial
货币类型/MONEY
空间类型具体不列了,内容太多了
搜索类型/具体不列了,内容太多了
XML具体不列了,内容太多了
JSON具体不列了,内容太多了

表格里的/表示不存在对应的特性。

在人大金仓中 空字符会自动转换为NULL。与空字符串比较,其实就是与NULL比较,不能用等号。
#kingbase.config
可以设置 ora_input_emptystr_isnull = false  ,限制这种转换。

参考:https://help.kingbase.com.cn/v8/development/sql-plsql/sql/datatype.html

注意点

1、KES中的整型不存在有符号、无符号的分别。都是有符号数。

2、KES中的自增使用的不是Auto_Increatment,是XXXXserial类型。(好像可以兼容)

3、Mysql中字符串类型中n指的是字符,但是总长度受字节限制。KES中可以通过系统设置是字符,还是字节。

4、一些特殊类型

  • UUID: 是128位的存储,不是字符串。
  • IP地址:
  • 对象标识符类型
  • 伪类型

5、KES有一些类型叫范围类型组合类型,对象类型,等等,都不建议使用,太生僻了。

6、很多产品相关的类型,建议完全不用。

这些KES的方言类型完全不建议使用。另外有些违背了数据库范式。

数据类型比较

跟Mysql类似

数据类型转换

支持将值从一种数据类型隐式和显式转换为另一种数据类型。

建议都采用显示转换

DML

仅标准SQL是一致的,其他不完全一致。

DDL

注意:

  • 仅列常用语法,或者某个语法的常用部分。
  • 仅列由于mysql语法引出的,不列KES的方言特性。

KES参考:https://help.kingbase.com.cn/v8/development/sql-plsql/sql/SQL_Statements_6.html

创建表

-- KES
CREATE   TABLE [ IF NOTEXISTS ] table_name ( [{ column_name data_type [ INVISIBLE | VISIBLE ] [ COLLATE collation ] [ column_constraint [ ... ] ]| table_constraint| LIKE source_table [ like_option ... ] }[, ... ]
] )
[ INHERITS ( parent_table [, ... ] ) ]
[ PARTITION BY { RANGE | LIST | HASH } ( { column_name | ( expression ) } [
COLLATE collation ] [ opclass ] [, ... ] ) [ partition_extented_spec ] ]
[ USING method ]
[ WITH ( storage_parameter [= value] [, ... ] ) | WITHOUT OIDS ]
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]
[ WITH ( ONCOMMIT = value ) ]
[ TABLESPACE tablespace_name ]
[ { ENABLE | DISABLE } [ VALIDATE | NOVALIDATE ] constraint [ ... ] ]
[ ENCRYPTED [BY tablekey ]]
自增列

KES:

-- 通过 serial,smallserial,bigserial 。可以为NULL。
CREATE TABLE cinemas (id serial,name text,location text
) 
-- 通过  auto_increment ,会自动转换为 serial。
-- pgsql 不支持,  人大金仓支持。
CREATE TABLE cinemas (id int auto_increment,  name text,location text
) 

MYSQL:

CREATE TABLE cinemas (id int auto_increment,  name text,location text
) 
主键

KES:

-- 列约束CREATE TABLE distributors (did     integer CONSTRAINT firstkey PRIMARY KEY,name    varchar(40)
);CREATE TABLE distributors (did     integer PRIMARY KEY,name    varchar(40)
);-- 表约束
CREATE TABLE distributors (did     integer,name    varchar(40),PRIMARY KEY(did)
);

MYSQL:

CREATE TABLE distributors (did     integer PRIMARY KEY,name    varchar(40)
);-- 表约束
CREATE TABLE distributors (did     integer,name    varchar(40),PRIMARY KEY(did)
);
唯一索引

KES:

-- 字段约束
CREATE TABLE distributors (did     integer,name    varchar(40) UNIQUE
);        -- 或者 表约束
CREATE TABLE distributors (did     integer,name    varchar(40),UNIQUE(name)
);

MYSQL:

-- 字段约束
CREATE TABLE distributors (did     integer,name    varchar(40) UNIQUE
);        -- 或者 表约束
CREATE TABLE distributors (did     integer,name    varchar(40),UNIQUE(name)
);
普通索引

通过约束可以创建索引

注释

MYSQL:

-- 加在表定义以及列定义后面
comment 'this is a comment'-- 没有专门命令删除comment。

KES:

-- 表加注释
Comment on  table [tablename] IS  '表注释'
-- 列加注释
Comment on  column  [tablename].ColumnName  IS  '列注释'-- 删除表注释
Comment on  table [tablename] IS  NULL
-- 删除列注释
Comment on  column  [tablename].ColumnName  IS  NULL
自动更新修改时间

MYSQL:

  `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,`gmt_update` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

KES:

 modtime   timestamp DEFAULT current_timestamp    -- 插入时的默认值

KES没有 ON UPDATE CURRENT_TIMESTAMP,只能通过创建触发器来实现了。

分区

不一致。略。

通过一个查询创建表

KES:

CREATE TABLE films_recent ASSELECT * FROM films WHERE date_prod >= '2002-01-01';

MYSQL:

CREATE TABLE films_recent ASSELECT * FROM films WHERE date_prod >= '2002-01-01';

索引

创建索引

KES参考:http://help.kingbase.com.cn/v8/admin/general/administrator-guide/14-managing-indexes.html?highlight=%E7%B4%A2%E5%BC%95

KES:

-- 显式地创建索引
CREATE INDEX emp_ename_index ON emp(ename)       TABLESPACE users_space;
--  创建唯一索引
CREATE UNIQUE INDEX dept_unique_index ON dept (dname)       TABLESPACE users_space;
-- 创建B+树索引 (索引可以指定 排序,NULL顺序处理)
CREATE INDEX test2_info_nulls_low ON test2 (info NULLS FIRST);
-- 创建HASH索引 
CREATE INDEX name ON table USING HASH (column);
-- 函数索引
CREATE INDEX test1_lower_col1_idx ON test1 (lower(col1));
-- 多列索引
CREATE INDEX test2_mm_idx ON test2 (major, minor);

注意:本地和全局索引

MYSQL:

mysql的索引类型只有BTree和Hash

修改索引

删除索引

KES:

DROP INDEX [index_name];
-- 删除通过约束创建的索引
ALTER TABLE [tablename] DROP CONSTRAINT [constraint_name];

MYSQL:

DROP INDEX index_name ON tbl_name

Mysql的索引是在表上的,不同table上的索引名称可以相同。

修改表

-- KES
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]action [, ... ]

ONLY 表示只修改本表,不修改后代表。 默认都必须加上。

另外不建议使用后代表。

新增列

KES:

    ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]ALTER [ COLUMN ] column_name [ SET DATA ] TYPE data_type [ COLLATE collation ] [ USING expression ]... ...

MYSQL:

  ADD [COLUMN] col_name column_definition         [FIRST | AFTER col_name]DROP [COLUMN] col_nameALTER [COLUMN] col_name .......MODIFY [COLUMN] col_name column_definition         [FIRST | AFTER col_name]RENAME COLUMN old_col_name TO new_col_name

MYSQL修改列方式更复杂。

修改列类型

KES:

ALTER [ COLUMN ] column_name ...MODIFY column_name [ datatype ][ NULL | NOT NULL ]
MODIFY ( column_name [ datatype ][ NULL | NOT NULL ][, ... ] )
删除列

KES:

DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ]

MYSQL:

DROP [COLUMN] col_name

删除表

兼容。略。

创建序列

CREATE [ TEMPORARY | TEMP ] SEQUENCE [ IF NOT EXISTS ] name 
[ INCREMENT [ BY ] increment ][ MINVALUE minvalue | NO MINVALUE ] [ MAXVALUE maxvalue | NO MAXVALUE ][ START [ WITH ] start ] [ CACHE cache ] [ NOCACHE ] [ [ NO ] CYCLE ] [ NOCYCLE ][ ORDER ] [ NOORDER ] [ OWNED BY { table_name.column_name | NONE } ]
-- 创建一个序列 (一般对应mysql 的auto_increatment)
CREATE SEQUENCE serial_A START 1;
-- 使用一个序列
select nextval('serial_A')

序列是基于bigint的。

setval(,)用于设置当前序列号。下个序列为 设置的值加1。

删除序列

KES:

DROP SEQUENCE [ IF EXISTS ] name [, ...] [ CASCADE | RESTRICT ]

MYSQL:

不涉及

函数

此处仅比较常用函数,特殊数据类型比如:xml,json,空间数据等处理函数肯定是不一样的,参考官方文档。

控制流函数

函数MYSQLKES
CASECASE VALUE WHEN … THEN … ELSE … END
CASE WHEN … THEN … ELSE … END
CASE VALUE WHEN … THEN … ELSE … END
CASE WHEN … THEN … ELSE … END
根据值的真假返回值IF(expr1,expr2,expr3)if(expr1 INT兼容类型, expr2 任意类型, expr3 任意类型)
根据值是否为null,返回值IFNULL(expr1,expr2)ifnull(expr1, expr2)
相等则返回nullNULLIF(expr1,expr2)nullif(expr1, expr2)

函数一致。

MYSQL参考:https://dev.mysql.com/doc/refman/8.0/en/flow-control-functions.html

KES参考:http://help.kingbase.com.cn/v8/development/sql-plsql/sql/Function.html#if

数学函数

MYSQL参考:https://dev.mysql.com/doc/refman/8.0/en/numeric-functions.html

KES参考:http://help.kingbase.com.cn/v8/development/sql-plsql/sql/Function.html#id5

MYSQL 函数说明KES函数
ABS()绝对值abs (n)
ACOS()arc cosineacos(n)
ASIN()arc sineasin(n)
ATAN()arc tangentatan(n)
ATAN2(), ATAN()反正切atan2(n1, n2)
CEIL()返回不小于给定数的最小整数ceil(n)
CEILING()CEIL()同义词ceiling({dp|numeric})
CONV()不同进制进行转换/
COS()余弦cos(n)
COT()余切cot(n)
CRC32()CRC32计算/
DEGREES()转换弧度为度数degrees(dp)
DIV整数除div(y numeric, x numeric)
EXP()返回自然常数e的x次幂exp({dp|numeric})
FLOOR()返回不大于给定数的最大整数FLOOR({dp|numeric});
LN()返回给定数的自然对数。小于0的数返回null。ln({dp|numeric})
LOG()返回给定数指定底数的对数。LOG(X), LOG(B,X)。仅指定一个参数,则以e作为底数。log({dp|numeric})
log(n2 numeric, n1 numeric)
LOG10()返回以10为底的对数log10({numeric|double})
LOG2()返回以2位第的对数/
MOD()取模mod(y,x)
PI()返回PI值。pi()
POW()POW(X,Y),返回X的Y次幂/使用POWER
POWER()POW 同义词power(a dp, b dp)
power(a numeric, b numeric)
RADIANS()返回给定度数对应的弧度。radius(circle)
RAND()返回一个随机数。[0.0 ,1.0)random()
ROUND()ROUND(X), ROUND(X,D)。D不指定则为0。D的绝对值最大为30。D可为负数。四舍五入近似到指定小数位数,round({dp|numeric})
round(v numeric, s int)
SIGN()返回数的符号。1,0,-1sign({dp|numeric})
SIN()sinsin({dp|numeric})
SQRT()返回平方根。负数返回null。sqrt(n)
TAN()tanTAN(n)
TRUNCATE()截断数字到指定位数小数。当小数位是负数时,往左移。TRUNC(number)

日期和时间函数

MYSQL参考:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html

MYSQL函数描述KES函数
ADDDATE()ADDDATE(date,INTERVAL expr unit), ADDDATE(date,days)。
当使用inteval方式时,ADDDATE()和DATE_ADD()是同义词。
days 参数如果是小数,则采用四舍五入取整。
无对应的函数,可以使用 (time + interval ‘-1 day’)。
ADDTIME()ADDTIME(expr1,expr2)。把expr2加到expr1。expr2必须是个time类型。/
CONVERT_TZ()CONVERT_TZ(dt,from_tz,to_tz),把时间从一个时区转换为另一个时区。/
CURDATE()返回当前日期。格式YYYY-MM-DD(string类型),YYYYMMDD(数字类型)/
CURRENT_DATE(), CURRENT_DATE当前日期。不包含时间current_date()。返回的是包含时间部分为0的日期。KES中是有时区的
CURRENT_TIME(), CURRENT_TIME当前时间,不包含日期。current_time(precision)。 ,current_time
带有时区的时间
CURRENT_TIMESTAMP(), CURRENT_TIMESTAMP返回当前时间戳current_timestamp(precision),current_timestamp
带有时区的
TIMEOFDAY
CURTIME()CURTIME([fsp])。fsp小数部分,0~6。
当前时间(不包括日期)。格式:‘hh:mm:ss’ , hhmmss
CURRENT_TIME,没有参数
DATE()DATE(expr)。返回日期部分。DATE
DATE_ADD()DATE_ADD(date,INTERVAL expr unit)。/
DATE_FORMAT()DATE_FORMAT(date,format)/
DATE_SUB()DATE_SUB(date,INTERVAL expr unit)/
DATEDIFF()返回date1和date2两个日期之间的天数days_between(date1,date2)
KES的这个返回值是带有小数部分的,不是整天
DAY()DAYOFMONTH()同义词通过extract抽取
DAYNAME()DAYNAME(date)。返回日期是周几的名称通过extract抽取
DAYOFMONTH()DAYOFMONTH(date)。返回日期的DAY部分通过extract抽取
DAYOFWEEK()DAYOFWEEK(date)。返回日期是周几的序号,1~7(周日到周六)通过extract抽取
DAYOFYEAR()返回日期是当前的第几天 (1-366)通过extract抽取
EXTRACT()抽取日期的指定部分EXTRACT(field FROM source)
FROM_DAYS()转换一个数字成date类型,366为0001-01-01。
FROM_UNIXTIME()Unix时间戳转日期。从1970-01-01开始,以秒为单位。会转换为本地时间。to_timestamp (double precision )
参数有差异
GET_FORMAT()获取格式化串。系统内部定义的格式串。/
HOUR()抽取时间部分通过extract抽取
LAST_DAYLAST_DAY(date)。某月最后一天。LAST_DAY
LOCALTIME(), LOCALTIMENOW()同义词LOCALTIME
LOCALTIMESTAMP, LOCALTIMESTAMP()NOW()同义词LOCALTIMESTAMP
MAKEDATE()构造日期。MYSQL 3个参数,KES 2个参数make_date(year int, month int, day int)
MAKETIME()从时,分,秒域创建时间。make_time(hour int, min int, sec double)
MICROSECOND()返回毫秒部分通过extract抽取
MINUTE()返回分钟部分通过extract抽取
MONTH()返回月份部分。1~12。month(datetime date)
MONTHNAME()返回月份名称通过extract抽取
NOW()获取当前时间。now()。KES不能指定精度
PERIOD_ADD()PERIOD_ADD(P,N)。P格式:YYMM 或者YYYYMM,N月数。给一个年月加上指定月份。/
PERIOD_DIFF()PERIOD_DIFF(P1,P2)。返回2个年月数据的月份差:P1-P2months_between,参数格式是不一样的
QUARTER()返回给定日期的季度。值为1~4。通过extract抽取
SEC_TO_TIME()转换给定秒数为TIME表示。 ‘hh:mm:ss’ 或hhmmss,没有前导0。
SECOND()返回秒 (0-59)通过extract抽取
STR_TO_DATE()STR_TO_DATE(str,format)。转换str到date。STR_TO_DATE
SUBDATE()SUBDATE(date,INTERVAL expr unit), SUBDATE(expr,days)。三个参数时,为DATE_SUB() 的同义词。/
SUBTIME()SUBTIME(expr1,expr2)。expr2是个time类型。/
SYSDATE()SYSDATE([fsp])。返回当前时间。SYSDATE()。不能指定精度
TIME()TIME(expr)。返回日期时间部分。
TIME_FORMAT()格式化时间。time_format(time,format),格式少一些。官网示例不能执行。
TIME_TO_SEC()时间转化为秒数。/
TIMEDIFF()TIMEDIFF(expr1,expr2)。expr1 − expr2。返回的是TIME类型。TIMESUB(head, tail) ,返回时间的秒级差。
TIMESTAMP()TIMESTAMP(expr), TIMESTAMP(expr1,expr2)。一个参数则返回一个datetime。2个参数则返回2个参数的和,第2个参数是time。
TIMESTAMPADD()TIMESTAMPADD(unit,interval,datetime_expr)
TIMESTAMPDIFF()TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)。datetime_expr2 − datetime_expr1
TO_DAYS()TO_DAYS(date)。返回给定日期从0000-01-01的天数。1582年之前的结果不可信。/
TO_SECONDS()TO_SECONDS(expr)。返回给定日期从0000-01-01的秒数。1582年之前的结果不可信。/
UNIX_TIMESTAMP()UNIX_TIMESTAMP([date])/
UTC_DATE()UTC_DATE, UTC_DATE()/
UTC_TIME()UTC_TIME, UTC_TIME([fsp])/
UTC_TIMESTAMP()UTC_TIMESTAMP, UTC_TIMESTAMP([fsp])/
WEEK()WEEK(date[,mode])。返回是当前的第几周。通过extract抽取
WEEKDAY()WEEKDAY(date)。返回是星期几。(0 = Monday, 1 = Tuesday, … 6 = Sunday)通过extract抽取
WEEKOFYEAR()WEEKOFYEAR(date)。返回是当年第几周。等同于WEEK(date,3)。通过extract抽取
YEAR()抽取日期的 年份 字段year(text)。KES只能是字符串
YEARWEEK()YEARWEEK(date), YEARWEEK(date,mode)/
/减去参数生成一个年、月不包含日的格式化结果。age(timestamp, timestamp)
SYSDATE返回当前日期和时间(在语句执行期间变化)clock_timestamp()
/获取时间子域。标准SQL:extractdate_part(text,timestamp)
date_part(text, interval)
/在某个精度截断时间。date_trunc(field, source [, time_zone ])
/判断传入时间是否为有限值isfinite(date)
/调整间隔,使30天时间段表示为月justify_days(interval)
/调整间隔,使24小时时间段表示为日 。justify_hours(interval)
/使用 justify_days justify_hours 调整间隔,并进行额外的符号调整justify_interval(interval)
/从年,月,周,日,时, 分, 秒域创建时间间隔。make_interval(years int default 0, months int default 0, weeks int default 0,days int default 0, hours int default 0, mins int default 0, secs double default 0.0)
/从年,月,日,时,分,秒域创建时间戳。make_timestamp(year int, month int, day int, hour int, min int, sec double)
从年,月,日,时,分,秒,时区域创建时间戳。make_timestamptz(year int, month int, day int, hour int, min int, sec double[, timezone text])
计算日期1与日期2的月份差。带小数months_between(date date1, date date2)
返回date四舍五入到格式模型指定的单位round(date)
返回当前会话的时区sessiontimezone

KES中的Date 是包含 日期和时间的。

MYSQL与KES中的时间部分的名字是不一样的。

SYSDATE()与NOW()区别

SYSDATE()与NOW()返回值一样。不同之处在于在同一个statement中的处理。NOW() 在同一个查询中,返回同一个值。SYSDATE()返回每次调用的值。

select a  , now(),sleep(1),now()
from (
select '1' as a union all select '2' as a
) u -- NOW()值一样。
1	2022-09-07 16:29:13	0	2022-09-07 16:29:13
2	2022-09-07 16:29:13	0	2022-09-07 16:29:13select a  , sysdate(),sleep(1),sysdate()
from (
select '1' as a union all select '2' as a
) u 
-- sysdate()值不一样。
1	2022-09-07 16:30:18	0	2022-09-07 16:30:19
2	2022-09-07 16:30:19	0	2022-09-07 16:30:20

字符串函数

Mysql参考: https://dev.mysql.com/doc/refman/8.0/en/string-functions.html , https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-instr

KES参考:http://help.kingbase.com.cn/v8/development/sql-plsql/sql/Function.html#id6

Mysql函数说明KES函数
ASCII()ASCII(str)。返回字符串左边字符的ASCII码。ASCII
BIN()返回整数的二进制表示,等同CONV(N,10,2)。/
BIT_LENGTH()返回字符串占多少位(bit)BIT_LENGTH
CHAR()CHAR(N,… [USING charset_name])。返回给定整数的char,连成一个字符串chr(int),只支持一个
CHAR_LENGTH()CHAR_LENGTH(str)。返回字符串有多少个字符,不考虑内部编码。char_length(string)
CHARACTER_LENGTH()CHAR_LENGTH()同义词character_length(string)
CONCAT()连接多个字符串。CONCAT
CONCAT_WS()CONCAT_WS(separator,str1,str2,…)。用指定分隔符连接多个字符串。concat_ws
ELT()ELT(N,str1,str2,str3,…)。返回指定index的字符串。/
EXPORT_SET()EXPORT_SET(bits,on,off[,separator[,number_of_bits]])。返回整数指各位的值。/
FIELD()FIELD(str,str1,str2,str3,…)。返回str的index。/
FIND_IN_SET()FIND_IN_SET(str,strlist)。/
FORMAT()FORMAT(X,D[,locale])KES与MYSQL同名但是作用不一样
FROM_BASE64()FROM_BASE64(str)decoding(‘MTIzMDAwMDAx’,‘base64’)
HEX()HEX(str), HEX(N)/
INSERT()INSERT(str,pos,len,newstr)/
INSTR()INSTR(str,substr)。与LOCALE(substr,str)一样。instr(expr1 text, expr2 text,[expr3 int[,expr4 int]])
LCASE()=LOWER()同义词LCASE
LEFT()LEFT(str,len)LEFT
LENGTH()LENGTH(str)。返回字符串占用的字节数。octet_length(string)
LIKE/
LOAD_FILE()LOAD_FILE(file_name)。/
LOCATE()LOCATE(substr,str), LOCATE(substr,str,pos)CHARINDEX
LOWER()转小写字符lower(string)
LPAD()LPAD(str,len,padstr)。给字符串str加前导padStr(指定长度)LPAD
LTRIM()移除左空格。LTRIM
MAKE_SET()MAKE_SET(bits,str1,str2,…)。bits参数用于决定选择那些字符串,以bits二进制位上是否为1来决定是否选择对应索引的字符串。/
MATCH()Perform full-text search
MID()MID(str,pos,len) 等同于 SUBSTRING(str,pos,len)。/
NOT LIKENegation of simple pattern matching
NOT REGEXPNegation of REGEXP
OCT()OCT(N),返回BIGINT型N的八进制字符串。/
OCTET_LENGTH()等同于LENGTH()octet_length(string)
ORD()ORD(str)。返回第一个字符的 ORD,如果是单字节字符,则返回ACSII。否则:(1st byte code)+ (2nd byte code * 256)+ (3rd byte code * 256^2) …/
POSITION()等同于 LOCATE()position(substring in string)
QUOTE()给字符串加单引号quote_ident
REGEXPWhether string matches regular expressionregexp_match
REGEXP_INSTR()REGEXP_INSTR(expr, pat[, pos[, occurrence[, return_option[, match_type]]]])/
REGEXP_LIKE()REGEXP_LIKE(expr, pat[, match_type])/
REGEXP_REPLACE()REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])REGEXP_REPLACE
REGEXP_SUBSTR()REGEXP_SUBSTR(expr, pat[, pos[, occurrence[, match_type]]])/
REPEAT()REPEAT(str,count)。重复字符串n次。REPEAT
REPLACE()REPLACE(str,from_str,to_str)REPLACE
REVERSE()REVERSE(str)。反转字符串。REVERSE
RIGHT()RIGHT(str,len)。返回右边n个字符。RIGHT
RLIKEWhether string matches regular expression
RPAD()RPAD(str,len,padstr)。右边补充字符到len长度。
SELECT RPAD(‘hi’,5,‘?’),RPAD(‘hi’,1,‘?’);
OUTPUT:hi??? h
RPAD
RTRIM()RTRIM(str)。RTRIM
SOUNDEX()SOUNDEX(str)/
SOUNDS LIKEexpr1 SOUNDS LIKE expr2。等同于:SOUNDEX(expr1) = SOUNDEX(expr2)/
SPACE()SPACE(N)/
STRCMP()Compare two strings/
SUBSTR()等同于SUBSTRING()
SUBSTRING()SUBSTRING(str,pos), SUBSTRING(str FROM pos), SUBSTRING(str,pos,len), SUBSTRING(str FROM pos FOR len)SUBSTRING。位置的参数意义不同。
SUBSTRING_INDEX()SUBSTRING_INDEX(str,delim,count)。返回指定分隔符第count次出现之前的子串。count为负数时,从右边开始数,返回到字符串尾部的子串。
SELECT SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, 2), SUBSTRING_INDEX(‘www.mysql.com’, ‘.’, -2);
OUTPUT:www.mysql mysql.com
/
TO_BASE64()TO_BASE64(str)encode(‘123000001’,‘base64’);
TRIM()TRIM([{BOTH | LEADING | TRAILING} [remstr] FROM] str), TRIM([remstr FROM] str)BTRIM 部分等同于。
UCASE()等同于 UPPER()UCASE
UNHEX()UNHEX(str)。16进制转字符串。/
UPPER()UPPER
WEIGHT_STRING()WEIGHT_STRING(str [AS {CHAR|BINARY}(N)] [flags])/
/搜索文本内容contains(expr1 text,expr2 text [,label Numeric])
COLLATE语法把字符串转化为另一个编码形式的 字节表示convert(string bytea,src_encoding name,dest_encoding name)
/将字符串转换为数据库编码。返回stringconvert_from(string bytea, src_encoding name)
/将字符串 string 转换为 dest_encoding 指定的编码格式。返回stringconvert_to(string text,dest_encoding name)
从 string 中的文本表达解码二进制数据decoding(string text,format text)
将二进制数据 data 编码成一个文本表达。format 支持的格式有:base64 、 hex、escape。ENCODE
/根据一个格式字符串产生格式化的输出。类似于printfFORMAT
/首字母大写INITCAP
/查找字符串位置,以字节计数。INSTRB
OVERLAY
说明
  • SOUNDEX

    SOUNDEX()函数用于返回字符串的语音表示形式

  • WEIGHT_STRING

    WEIGHT_STRING()函数来查找字符串的权重。字符。该函数以二进制字符串形式返回表示重量的值。因此,我们需要使用 HEX(WEIGHT_STRING(str))函数以可打印的形式显示重量。

    权重主要用于比较字符。

    SELECT HEX(WEIGHT_STRING('AaBbCc' ) ) AS Weight;
    -- OUTPUT:
    004100410042004200430043SELECT HEX(WEIGHT_STRING(BINARY 'AaBbCc')) AS Weight;
    -- OUTPUT:
    416142624363
    

KES 的 SUBSTRING的实际执行结果与官网的示例结果是不一样的。

-- 官网示例
SELECT SUBSTRING('ABCDEFG',-5,4) "Substring" FROM DUAL;+-----------+
| Substring |
+===========+
| CDEF      |
+-----------+--  实际结果 。应该是从左边偏移
SELECT  SUBSTRING('ABCDEFG',-3,4),SUBSTRING('ABCDEFG',-2,4),SUBSTRING('ABCDEFG',-1,4),SUBSTRING('ABCDEFG',0,4),SUBSTRING('ABCDEFG',1,4)'',	'A'	'AB'	'ABC'	'ABCD'

类型转换

CAST

MYSQL:

CAST(expr AS type [ARRAY])
-- MYSQL8.0.22支持。
CAST(timestamp_value AT TIME ZONE timezone_specifier AS DATETIME[(precision)])

KES:

CAST(expr AS type [ARRAY])
Convert

MYSQL:

CONVERT(expr USING transcoding_name)
CONVERT(expr,type)

CONVERT(expr USING transcoding_name) 用于把数据转换为不同的字符集。

SELECT CONVERT('abc' USING utf8mb4);
-- OUTPUT
abcSELECT CONVERT(_latin1'Müller' USING utf8mb4);
-- OUTPUT:
Müller

KES:

CONVERT(expr,type)
数据类型的转换

CAST(expr AS type [ARRAY]) 等同于 CONVERT(expr,type)

把一个表达式转化为另一种数据类型。

type支持的类型:

  • BINARY[(N)]
  • CHAR[(N)] [charset_info]
  • DATE
  • DATETIME[(M)]
  • DECIMAL[(M[,D])]
  • DOUBLE
  • FLOAT[§]
  • JSON (mysql 8.0)
  • NCHAR[(N)]
  • REAL
  • SIGNED [INTEGER]
  • spatial_type(MySQL 8.0.24)
  • TIME[(M)]
  • UNSIGNED [INTEGER]
  • YEAR(MySQL 8.0.22)
  • AT TIME ZONE(MySQL 8.0.22)

位操作函数

参考:https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html

MYSQLDescriptionKES
&Bitwise AND&,BITAND
>>Right shift>>
<<Left shift<<
^Bitwise XOR^
BIT_COUNT()返回二进制位被设置为1的位数。
[``](https://dev.mysql.com/doc/refman/8.0/en/bit-functions.html#operator_bitwise-or)Bitwise OR
~Bitwise inversion~
SELECT 127 | 128, 128 << 2, BIT_COUNT(15);
-- OUTPUT:
255	512	4SELECT X'40' | X'01', b'11110001' & b'01001111';-- OUTPUT:65	65SELECT _binary X'40' | X'01', b'11110001' & _binary b'01001111';-- OUTPUT:1	0 

在mysql 8.0之前,位操作符 仅支持 bigint,返回结果也是bigint。在mysql 8.0 之后,操作数支持二进制字符串((BINARY, VARBINARY, 和 BLOB ),返回值类型与操作符类型一致。

BIT_AND(), BIT_OR(), 和BIT_XOR() 是聚合函数,用于聚合多行记录的某列的值。

其他

Spring 集成

把官方的jar包上传到maven库

引入maven库

JDBC配置

代码

示例

数据库
Create table Test_All(id a tinyint NOT null default 0 ,b smallint NOT null default 0 ,c int NOT NULL default 0,d bigint NOT NULL default 0 ,e float(3)  NOT NULL default 0,f double PRECISION  NOT NULL default 0,g date default current_timestamp ,h time ,i timestamp,j date with  time zone,k time with  time zone,l timestamp with  time zone,m char(8 byte) NOT NULL default '',n varchar(32 byte) NOT NULL default '',o bit(8) ,p boolean NOT NULL default false ,q MONEY NOT NULL default 0,u UUID NOT NULL default 0,v UUID NOT NULL default {00000000-0000-0000-0000-000000000000} ,)
Java bean

同时兼容mysql和KES,并支持切换

mybatis-plus兼容

boolean型属性

经验证,int 类型的1/0 会自动转换为boolean对应的true/false

update_date类型属性

附录

注意

官网上的文档有很多错误,一定要自己确认。

官网上的文档有很多错误,一定要自己确认。

官网上的文档有很多错误,一定要自己确认。

navicat连接KES

未找到相关资料

DBeaver连接KES

1、下载DBeaver:https://dbeaver.io/download/ 。下载windows版本。

2、安装

3、下载KES的驱动:

吐槽:人大金仓官网居然没有。

在安装目录下的 /KESRealPro/V008R006C006B0013/Interface/jdbc 下有。

4、在DBeaver中创建连接

  • 创建驱动
image-20221025134351461 image-20221025134454941 image-20221025135547764

image-20221025144036750

驱动信息:

com.kingbase8.Driver
jdbc:kingbase8://{host}[:{port}]/[{database}]

命令行

在安装根目录的 ./KESRealPro/V008R006C006B0013/ClientTools/bin 下有ksql 文件。需要加入到PATH中才可以直接访问。

Usage:ksql [OPTION]... [DBNAME [USERNAME]]General options:-c, --command=COMMAND    run only single command (SQL or internal) and exit-d, --dbname=DBNAME      database name to connect to (default: "root")-f, --file=FILENAME      execute commands from file, then exit-l, --list               list available databases, then exit-v, --set=, --variable=NAME=VALUEset ksql variable NAME to VALUE(e.g., -v ON_ERROR_STOP=1)-V, --version            output version information, then exit-X, --no-ksqlrc          do not read startup file (~/.ksqlrc)-1 ("one"), --single-transactionexecute as a single transaction (if non-interactive)-?, --help[=options]     show this help, then exit--help=commands      list backslash commands, then exit--help=variables     list special variables, then exitInput and output options:-a, --echo-all           echo all input from script-b, --echo-errors        echo failed commands-e, --echo-queries       echo commands sent to server-E, --echo-hidden        display queries that internal commands generate-L, --log-file=FILENAME  send session log to file-n, --no-readline        disable enhanced command line editing (readline)-o, --output=FILENAME    send query results to file (or |pipe)-q, --quiet              run quietly (no messages, only query output)-s, --single-step        single-step mode (confirm each query)-S, --single-line        single-line mode (end of line terminates SQL command)Output format options:-A, --no-align           unaligned table output mode--csv                CSV (Comma-Separated Values) table output mode-F, --field-separator=STRINGfield separator for unaligned output (default: "|")-H, --html               HTML table output mode-P, --pset=VAR[=ARG]     set printing option VAR to ARG (see \pset command)-R, --record-separator=STRINGrecord separator for unaligned output (default: newline)-t, --tuples-only        print rows only-T, --table-attr=TEXT    set HTML table tag attributes (e.g., width, border)-x, --expanded           turn on expanded table output-z, --field-separator-zeroset field separator for unaligned output to zero byte-0, --record-separator-zeroset record separator for unaligned output to zero byteConnection options:-h, --host=HOSTNAME      database server host or socket directory (default: "local socket")-p, --port=PORT          database server port (default: "54321")-U, --username=USERNAME  database user name (default: "root")-w, --no-password        never prompt for password-W, --password           force password prompt (should happen automatically)

参考:http://help.kingbase.com.cn/v8/admin/reference/ref-ksql/ksql-3.html?highlight=ksql

示例

#登录数据库(必须要指定连接数据库)
./ksql -h localhost -p 54321 -U system -W  test#带有密码的,必须不能带-h 参数。 并且 数据库的参数必须在 -w 之前。
./ksql  test -p 54321 -U system   -w 123456 
./ksql   -p 54321 -U system  test  -w 123456 #执行脚本命令
./ksql  test -p 54321 -U system   -w 123456 -c 'select 1;'

数据库结构迁移

问题

mysql中的表名和字段都是小写的,迁移后发现数据都已经迁移过来。但是点击权限的时候,提示关系‘表名’不存在。

使用kingbase自带的数据库迁移工具进行迁移,迁移时需要注意,如果mysql数据库中的表和字段是小写的话需要,在迁移的时候,点击配置选择表和字段大写,才能正常迁移,不然迁移后提示关系‘表名’不存在。

疑问

ksql 登录时为什么带 -h 就不能在参数中带上密码。那怎么连接其他机器上的数据库

mysql表的DDL语句能否自动转化为KES的DDL语句。

能够设置 类似mysql ON UPDATE CURRENT_TIMESTAMP,修改列时自动更新字段的值?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/229090.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据加密、端口管控、行为审计、终端安全、整体方案解决提供商

PC端访问地址&#xff1a; https://isite.baidu.com/site/wjz012xr/2eae091d-1b97-4276-90bc-6757c5dfedee 以下是关于这几个概念的解释&#xff1a; 数据加密&#xff1a;这是一种通过加密算法和密钥将明文转换为密文&#xff0c;以及通过解密算法和解密密钥将密文恢复为明文…

生活常识-如何开社保证明(四川)

下载并打开天府市民云APP 注册后登陆 点击社保服务 点击社保证明 点击【四川省社会保险个人社保证明名(近24个月)】 点击下载 下载后点击【QQ发送给好友&#xff0c;然后发送给自己的电脑设备(我的电脑)】

设计模式之工厂设计模式【创造者模式】

学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。各位小伙伴&#xff0c;如果您&#xff1a; 想系统/深入学习某技术知识点… 一个人摸索学习很难坚持&#xff0c;想组团高效学习… 想写博客但无从下手&#xff0c;急需…

国标GB28181对接的时候如何配置服务端口和本地端口

目 录 一、国标GB28181对接需要配置的端口等参数 二、GB28181服务器端口的配置&#xff1a;SIP服务器端口 三、GB28181设备测端口的配置&#xff1a;本地SIP端口 &#xff08;一&#xff09;本地SIP端口配置的意义 &#xff08;二&#xf…

香橙派5plus从ssd启动Ubuntu

官方接口图 我实际会用到的就几个接口&#xff0c;背面的话就一个M.2固态的位置&#xff1a; 其中WIFI模块的接口应该也可以插2230的固态&#xff0c;不过是pcie2.0的速度&#xff0c;背面的接口则是pcie3.0*4的速度&#xff0c;差距还是挺大的。 开始安装系统 准备工作 一张…

十四:爬虫-Redis基础

1、背景 随着互联网大数据时代的来临&#xff0c;传统的关系型数据库已经不能满足中大型网站日益增长的访问量和数据量。这个时候就需要一种能够快速存取数据的组件来缓解数据库服务I/O的压力&#xff0c;来解决系统性能上的瓶颈。 2、redis是什么 Redis 全称 Remote Dictio…

TTS | NaturalSpeech语音合成论文详解及项目实现【正在更新中】

----------------------------------&#x1f50a; 语音合成 相关系列直达 &#x1f50a; ------------------------------------- ✨NaturalSpeech&#xff1a;正在更新中~ ✨NaturalSpeech2&#xff1a;TTS | NaturalSpeech2语音合成论文详解及项目实现 本文主要是 讲解了Nat…

高斯矩阵相乘

高斯分布的概率密度函数&#xff1a; 其本质问题可抽象为&#xff1a;已知两个独立高斯分布&#xff0c; N 1 ∼ ( u 1 , δ 1 2 ​ ) &#xff0c; N 2 ∼ ( u 2 , δ 2 2 ) N 1∼(u1 ,δ 1^2​ )&#xff0c;N 2 ∼ ( u 2 , δ 2^ 2 ) N1∼(u1,δ12​)&#xff0c;N2∼(u2,δ…

iOS问题记录 - iOS 17通过NSUserDefaults设置UserAgent无效(续)

文章目录 前言开发环境问题描述问题分析1. 准备源码2. 定位源码3. 对比源码4. 分析总结 解决方案补充内容1. UserAgent的组成2. UserAgent的设置优先级 最后 前言 在上篇文章中对该问题做了一些判断和猜测&#xff0c;并给出了解决方案。不过&#xff0c;美中不足的是没有进一…

基于策略模式和简单工厂模式实现zip、tar、rar、7z四种压缩文件格式的解压

推荐语 这篇技术文章深入探讨了基于策略模式和简单工厂模式实现四种常见压缩文件格式的解压方法。通过阅读该文章&#xff0c;你将了解到如何利用这两种设计模式来实现灵活、可扩展的解压功能&#xff0c;同时适应不同的压缩文件格式。如果你对设计模式和文件处理感兴趣或刚好…

elasticsearch系列六:索引重建

概述 我们再起初创建索引的时候由于数据量、业务增长量都并不大&#xff0c;常常不需要搞那么多分片或者说某些字段的类型随着业务的变化&#xff0c;已经不太满足未来需求了&#xff0c;再或者由于集群上面索引分布不均匀导致节点直接容量差异较大等等这些情况&#xff0c;此时…

ubuntu中PyCharm导入虚拟环境pytorch / TensorFlow

之前编辑pytorch框架的程序都是在jupyter notebook,虽然jupyter notebook采用交互式的方式很方便&#xff0c;有时候查看别人代码的时候&#xff0c;很不方便&#xff0c;所以就下载了Pycharm&#xff0c;这里我就不赘述如何系在pycharm和如何破解&#xff0c;希望能帮助到大家…

CRM客户关系管理系统

系统开发环境以及版本 操作系统&#xff1a; Windows_7集成开发工具&#xff1a; Eclipse EE_4.7编译环境&#xff1a;JDK_1.8Web服务器&#xff1a;Tomcat_9.0数据库&#xff1a;MySQL_5.7.23 系统框架 spring框架springmvc框架mybatis框架Logback日志框架安全验证框架maven框…

【unity学习笔记】捏人+眨眼效果+口型效果

一、vriod捏人 1.在vroidstudio软件中捏人 2.导出模型&#xff08;.vrm) 二、vrid导入unity的插件 1.在Git上搜索、打开univrm。 2.找到release页面找到合适的插件版本。&#xff08;VRM-0.116.0_0f6c&#xff09; 3.将univrm导入到工程中&#xff08;assets&#xff09;。 三…

Hive实战:统计总分与平均分

文章目录 一、实战概述二、提出任务三、完成任务&#xff08;一&#xff09;准备数据文件1、在虚拟机上创建文本文件2、将文本文件上传到HDFS指定目录 &#xff08;二&#xff09;实现步骤1、启动Hive Metastore服务2、启动Hive客户端3、创建Hive表&#xff0c;加载HDFS数据文件…

poi操作Excel给列设置下拉菜单(数据验证)

效果图&#xff1a; pom.xml文件增加依赖&#xff1a; <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency> 12345Workbook实现类有三个&#xff1a;HSSFWork…

【银行测试】超细支付功能测试+测试点总结分析(详全)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、支付功能怎么测…

牛客网SQL训练5—SQL大厂面试真题

文章目录 一、某音短视频1.各个视频的平均完播率2.平均播放进度大于60%的视频类别3.每类视频近一个月的转发量/率4.每个创作者每月的涨粉率及截止当前的总粉丝量5.国庆期间每类视频点赞量和转发量6.近一个月发布的视频中热度最高的top3视频 二、用户增长场景&#xff08;某度信…

JavaScript的三种引入的方式

目录 (一).什么是JS1.1JS的特点1.2JS的组成 (二).JS引用的三种方式2.1标签引用&#xff08;或嵌入式)2.2文件引用&#xff08;外链式&#xff09;2.3行内式 (三).JS三种引用方式的优缺点1.行内方式&#xff1a;2.标签引用&#xff08;或嵌入式&#xff09;&#xff1a;3.文件引…

我最喜欢的趣味几何书-读书笔记

我最喜欢的趣味几何书-读书笔记 1、利用阴影的长度来测量 公元前6世纪&#xff0c;古希腊哲学家泰勒思为了测量金字塔&#xff0c;想到了这样的方法&#xff1a;选择了一个特殊的时间&#xff0c;在那个时间&#xff0c;他自身的影子长度刚好跟他的身高相等。此时&#xff0c…