关键字:
KingbaseES、数据类型、人大金仓、KingbaseES
一、实践前准备
1.1 软件环境要求
金仓数据库管理系统KingbaseES V8.0支持微软Windows 7、Windows XP、Windows 2003、 Windows 2008等32位及64位发行版本。
1.2 安装包准备
准备需要安装的金仓数据库管理系统KingbaseES安装程序和jdk1.8及以上的jdk环境。
1.3 注意事项
1.3.1 安装用户
在安装金仓数据库管理系统KingbaseES V8.0时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。Windows 10及以上的操作系统,需要使用管理员身份安装。
金仓数据库管理系统KingbaseES安装过程中有默认的安装目录C:\Program Files\Kingbase\ES\V8。
二、数据类型实践
2.1 字符数据类型
字符数据类型是用来存储字符(字母、数字)数据,包括单词和自由格式文本,以数据库字符集或国际字符集形式存储。字符列可以存储所有字母数字值,但数值列只能存储数值。常用字符数据类型如下:
character varying[(n [char | byte])]) | 有限制的变长字符类型 |
varchar(n [char | byte]) | n取值最小为 1 字节或 1 字符,最大10485760字节或字符,n缺省值为1。 char 或 byte 的默认值由NLS_LENGTH_SEMANTICS 确定。(n可以取'*',表示不限制长度) |
varchar2(n [char | byte]) | |
nvarchar2(n [char | byte])推荐使用 | |
nvarchar(n [char | byte]) | |
character(n [char | byte]) | 指定长度的定长字符类型,n 限定字符串长度,如果显式指定 char,则表示n个字符长度;如果显式指定byte,则表示n个字节长度;n默认值为1。 定长,不足定义长度时在最右边以空格补齐。如果字符串的长度超出 n,则按照 SQL 标准截断 (兼容PostgreSQL模式下,超出部分都是空格) 或报错。 |
char(n [char | byte]) | |
text | |
longtext | 无限变长,存储任何长度的字符串存储最大值为1G。 |
mediumtext | 指定长度变长,存储长度最大为16777215个字节字符串。 |
tinytext | 指定长度变长,存储长度最大为255个字节。 |
character定长字符类型设置字符限定的方式:nls_length_semantics =‘char/byte’,或者显示的指定。实践如下:
注意:一般单字符的长度是1字节,汉字是2字节,查看字符的长度char_length()使用如下:
character varying变长字符类型,如果显式指定了 char,则表示n个字符长度,n 的最大值为 10485760;如果显式指定byte,则表示n个字节长度;如果插入字符串数据长度小于 n 时,在字符串右边用空格补齐。如果n缺省,则character varying 表示接受任何长度的串。
varchar、varchar2、nvarchar、nvarchar2的区别:
- varchar2把所有字符都占两个字节处理,varchar只对汉字和全角等字符占两字节,数字、英文都是一个字节;
- varchar2把空串等同于null处理,varchar仍按空串处理
- varchar2字符要用几个字节存储,与数据库使用的字符集相关,如GBK,汉字就是2字符;UTF-8,汉字就是3字节;
- nvarchar和nvarchar2更适合存储中文。nvarchar中文一般2字节,其他一字节;nvarchar2中所有字符均按照2字节计算。
- nvarchar2更占空间,但具有更好的兼容性。
- nvarchar2是更好使用,比如nvarchar2(10)可以存进去10个汉字,也仅能存10个英文字符,varchar2(10)只能存5个字符,10个英文。
2.2 数值数据类型
数值类型存储 正、负定点及浮点数、零、Infinity、-Infinity以及NaN。
tinyint int1 | 1字节 | 小范围整数 | -128 to +127 |
smallint | 2字节 | 小范围整数 | -32768 to +32767 |
middleint mediumint int3 | 3字节 | 小范围整数 | -8388608 to 8388607 |
integer,推荐使用 | 4字节 | 整数的典型选择 | -2147483648 to +2147483647 |
bigint | 8字节 | 大范围整数 | -9223372036854775808 to +9223372036854775807 |
decimal(p,s) | 可变 | 可指定精度和标度 | p精度的取值范围 为1~1000;s标度 的取值范围为0~1000 |
numeric(p,s),推荐使用 number(p,s) | 可变 | 可指定精度和标度 | p精度的取值范围为 1~1000;s标度的取值 范围为0~1000 |
fixed(p,s) | 可变 | 可指定精度和标度 | p精度的取值范围 为1~1000;s标度 的取值范围为0~1000 |
real | 4字节 | 可变精度,不精确 | 6位十进制精度 |
double precision | 8字节 | 可变精度,不精确 | 15位十进制精度 |
smallserial | 2字节 | 自动增加的小整数 | 1到32767 |
serial | 4字节 | 自动增加的整数 | 1到2147483647 |
bigserial | 8字节 | 自动增长的大整数 | 1到9223372036854775807 |
整数类型包括 tinyint、smallint、integer(或int) 和 bigint 。整数类型推荐使用integer,浮点数推荐使用numeric类型。
其中numeric(m,n),整数部分位数不能大于m-n,小数部分位数大于n时会被四舍五入到n位。
2.3 时间/日期类型
日期时间数据类型。
名字 | 存储尺寸 | 描述 | 最小值 | 最大值 |
timestamp[(p)] [without time zone] | 8字节 | 包括日期 和时间( 无时区) | 4713 BC | 294276 AD |
timestamp[(p)]with time zone | 8字节 | 包括日 期和时间 ,有时区 | 4713 BC | 294276 AD |
timestamp[(p)] with local time zone | 8字节 | 包括日 期和时间 ,有时区 | 4713 BC | 294276 AD |
date | 4字节 | 日期 | 4713 BC | 5874897 AD |
time[(p)] [without time zone] | 8字节 | 一天中 的时间( 无日期) | 00:00:00 | 24:00:00 |
time[(p)]with timezone | 12字节 | 仅仅是一 天中的时 间(没有 日期), 带有时区 | 00:00:00+1459 | 24:00:00-1459 |
interval [fields] [(p)] | 16字节 | 时间间隔 | -178956970年 | 178956970年 |
yminterval | 16字节 | 时间间隔 | -178956970年 | 178956970年 |
dsinterval | 16字节 | 时间间隔 | -999999999日 | 999999999日 |
year | 4字节 | 年份 | 1901年 | 2155年 |
DateStyle 参数设置为 MDY,表示"月-日-年",设置为 DMY 就是"日-月-年",设置为 YMD,表示"年-月-日"。
DATE数据类型存储日期和时间值。每一个DATE日期值KingbaseES存储如下值:年、月、日、时、分、秒。 TO_DATE 函数可以将字符或者数值转换为date 值。日期或者时间的输入需要由单引号括起来。
to_date(str):将字符串转化为时间;
to_char(date):将时间转化为字符串;
月份差:moths_between(date1,date2)
年分差:月份差/12
next_day(x,y):用于计算X时间后第一个星期Y的时间,Y是一个字符串,表示用当前会话语言表示的一周中某一天的英文全称(星期一、星期二等),也可以是数值。
trunc(x [,format])截断日期,返回的是日期。
天数差:to_number(date1-date2)函数
小时数差:天数差*24
分钟数差:天数差*24*60
extract:从一个date和interval中截取到特定的部分:
select extract( year from date'2023-05-04')
2.4 大对象数据类型
KES内置LOB数据类型 BLOB、CLOB、NCLOB 可以存储大型非结构化数据,如文本、图像、视频和空间数据
数据类型 | 描述 |
BLOB | 二进制大对象,长度最大为 1G |
CLOB | 字符大对象,长度最大为 1G |
NCLOB | 字符大对象,长度最大为 1G |
BFILE | 存储文件的定位符,长度最大为 1G |
BYTEA | 变长二进制串,长度最大为 1G |
RAW | 变长存储二进制或者字符串的类型, 长度最大为 1G-4 |
LONG RAW | 变长存储二进制或者字符串的类型, 长度最大为 1G-4 |
2.5 布尔数据类型
布尔类型的值要么为true,要么为false,也可以用不等于0的整数、yes表示真,0、no表示假,并会对其值自动转换为true或false。
2.6 位串数据类型
位串就是一串 1 和 0 的串。BIT[(n)],BIT VARYING(n),变长位串,最长为n,n是正整数。如果存储超过n则报错。n缺省,表示该类型没有长度限制。
通过select b’判断b/B后的字符串是否为合法的二进制串,若是则以右则开始,以字节为单位转为对应ASCII码的字符,不足一个字节的按一个字节算,不是则报错返回。通过Select X’’语法,判断 x/X 后的字符串是否为合法的十六进制形式串,不是则报错返回。
三、总结
本文对KES常用数据类型进行了学习实践,熟悉了相关知识。




