YashanDB中的字符型包括英文字母、中文汉字、数字字符和特殊字符等,多用于存储文本数据。此外,该类型还能通过隐式数据转换,灵活地参与到数值型、日期时间型的运算场景之中。

字符型具体可分为CHAR、VARCHAR、NCHAR和NVARCHAR四种数据类型。

存储属性


类型字节长度
CHAR1~8000
VARCHAR1~32000
NCHAR1~8000
NVARCHAR1~32000

Note

在HEAP表中,长度超过8000字节的VARCHAR/NVARCHAR列会转换成LOB类型进行存储。创建表时,若指定某个列的数据类型大小超过8000字节,该列就会转换成LOB类型进行存储。

例如在UTF8字符集(一个字符最大可以占用4字节)下,定义了VARCHAR(2001 CHAR)列,则可能会存储8004字节的数据,此时该列会转换成LOB类型进行存储。

CHAR和VARCHAR


CHAR数据类型用于指定固定长度的字符串,VARCHAR数据类型用于指定可变长度的字符串。

CHARACTER可作为CHAR别名使用,含义与CHAR含义相同。VARCHAR2、CHARACTER VARYING可作为VARCHAR别名使用,含义与VARCHAR含义相同。

定义格式:

类型语法格式规则
CHARCHAR(Size[byte])定长字符串,Size的范围是[1,8000],不指定Size时,Size默认为1;当插入的字符串小于Size时会发生空格补位行为;当插入的字符串大于Size时会插入失败,报错。
VARCHARVARCHAR(Size[byte])变长字符串,Size的范围是[1,32000],当插入的字符串小于Size时不会发生空格补位行为;当插入的字符串大于Size时会插入失败,报错。
CHARCHAR(Size(char))定长字符串,Size的范围是[1,8000],不指定Size时,Size默认为1;当插入的字符串小于Size时会发生空格补位行为,补充的空格数为缺少的字符数;当插入的字符串大于Size时会插入失败,报错。
VARCHARVARCHAR(Size(char))变长字符串,Size的范围是[1,32000],当插入的字符串小于Size时不会发生空格补位行为;当插入的字符串大于Size时会插入失败,报错。

Size:宽度,表示最大长度,根据可选长度单位可分为字节长度和字符长度,行存表支持两种长度单位,列存表仅支持字节长度单位。

Size后可选单位为byte和char,分别为按照字节和按照字符,其中byte和char与Size之间可有空格也可以没有。若不指定单位,默认为byte。长度单位与NCHAR及NVARCHAR类型有所不同,请注意区分。

示例(HEAP表)


CREATE TABLE chartable (c1 CHAR(30),c2 CHAR(30 byte),c3 CHAR(30 CHAR));
INSERT INTO chartable VALUES('a','abc','abcccc');
COMMIT;
SELECT c1,c2,c3 FROM chartable;

C1                                C2                                C3                                                               

a                                 abc                               abcccc                    


CREATE TABLE varchartable (v1 VARCHAR(30),v2 VARCHAR(30 byte),v3 VARCHAR(30 CHAR));
INSERT INTO varchartable VALUES('a','abc','abcccc');
COMMIT;
SELECT v1,v2,v3 FROM varchartable;

V1                                V2                                V3                                                               

a                                 abc                               abcccc              


CREATE TABLE overlimit (c1 CHAR(9000 byte),c2 CHAR(9000 CHAR));

[1:32]YAS-04204 number of column size must be between 1 and 8000

NCHAR和NVARCHAR


NCHAR用于指定支持UNICODE的固定长度字符串,NVARCHAR用于指定支持UNICODE的可变长度字符串,这两种字符型仅支持在配置UNICODE字符集的数据库中使用,可以对多语言数据进行存储。

NVARCHAR2可作为NVARCHAR别名使用,含义与NVARCHAR含义相同。

NCHAR和NVARCHAR类型仅适用于HEAP表。

定义格式:

类型语法格式规则
NCHARNCHAR(Size)定长字符串,Size的范围是[1,4000],不指定Size时,Size默认为1;当插入的字符串小于Size时会发生空格补位行为;当插入的字符串大于Size时会插入失败,报错。
NVARCHARNVARCHAR(Size)变长字符串,Size的范围是[1,16000],当插入的字符串小于Size时不会发生空格补位行为;当插入的字符串大于Size时会插入失败,报错。

Size用于表示字符个数,必须为一个整数数值,数据的存储长度为Size的2倍,单位为字符长度。

NCHAR类型存储长度上限为8000字节,NVARCHAR类型存储长度上限为32000字节,超过如上大小限制的数据不会进行存储。

示例(HEAP表)


CREATE TABLE nchartable (c1 NCHAR(30));
INSERT INTO nchartable VALUES('a');
COMMIT;
SELECT c1 FROM nchartable;

C1                                                               

a                                                               
               


CREATE TABLE nvarchartable (v1 NVARCHAR(30));
INSERT INTO nvarchartable VALUES('a');
COMMIT;
SELECT v1 FROM nvarchartable;

V1                                                               

a             


CREATE TABLE overlimit_nchar (c1 NCHAR(9000));

[1:40]YAS-04204 number of column size must be between 1 and 4000

CREATE TABLE overlimit_nvarchar (c1 NVARCHAR(20000));

[1:46]YAS-04204 number of column size must be between 1 and 16000

字符型排序


当对字符型数据执行排序操作时:

  • 默认基于字符的ASCII值排序,例如'a'小于'b','1'小于'2'。
  • 通过NLSSORT函数,可以对UTF8编码的数据进行拼音排序。

字符型比较


当两个字符型数据执行比较运算时:

  • 执行大小写敏感的字符串比较。
  • 若比较符两边均为CHAR或均为NCHAR类型,YashanDB会先将较短的CHAR或NCHAR空格补位至较长CHAR的长度,再进行值比较。
  • 若比较符号的任意一边为VARCHAR或NVARCHAR类型,则不进行空格补位直接比较。

示例


SELECT 1 FROM DUAL
WHERE CAST('A' AS CHAR(50)) = CAST('A' AS CHAR(30));
           1

           1
   

SELECT 1 FROM DUAL
WHERE CAST('A' AS CHAR(50)) > CAST('A' AS VARCHAR(50));
           1

           1
   
SELECT 1 FROM DUAL
WHERE CAST('A' AS VARCHAR(30)) < CAST('A' AS CHAR(50));
           1

           1
               

SELECT CAST('A' AS CHAR) result FROM DUAL;
RESULT

A

SELECT CAST('ABC' AS CHAR) result FROM DUAL;
RESULT

A

SELECT CAST('ABC' AS CHAR(1)) result FROM DUAL;
RESULT

A

SELECT CAST('ABC' AS CHAR(2)) result FROM DUAL;
RESULT

AB

YashanDB
1 声望0 粉丝

崖山数据库系统YashanDB是深圳计算科学研究院自主设计研发的新型数据库管理系统,融入原创的有界计算、近似计算、并行可扩展和跨模融合计算理论,可满足金融、政企、能源等关键行业对高性能、高并发及高安全性的...