写点什么

YashanDB 字符型数据

作者:YashanDB
  • 2025-03-27
    广东
  • 本文字数:2072 字

    阅读完需:约 7 分钟

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


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

存储属性




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 含义相同。


定义格式:


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 表。


定义格式:



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 DUALWHERE CAST('A' AS CHAR(50)) = CAST('A' AS CHAR(30)); 1
1
SELECT 1 FROM DUALWHERE CAST('A' AS CHAR(50)) > CAST('A' AS VARCHAR(50)); 1
1 SELECT 1 FROM DUALWHERE 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
复制代码


发布于: 24 分钟前阅读数: 5
用户头像

YashanDB

关注

全自研国产新型大数据管理系统 2022-02-15 加入

还未添加个人简介

评论

发布
暂无评论
YashanDB字符型数据_数据库_YashanDB_InfoQ写作社区