关键字:

字符类型,char,varchar,nvarchar、人大金仓、KingbaseES

概述

KingbaseES数据库操作的每个值都有其数据类型。数据类型具有特定的属性,因此对不同数据类型的值KingbaseES处理是不同的。例如,可以添加NUMBER 数据类型的值,就不能添加RAW数据类型的值。

创建表时,必须为其每个列指定数据类型。创建过程或存储函数时,必须为其每个参数指定数据类型。数据类型定义每列的值域或每个参数的值域。例如,DATE列不能接受值 2 月 29 日(闰年除外)或值 2 或“SHOE”。插入列中的每个值都认定为该数据类型。例如,如果插入'01-JAN-98'值到DATE 列中,则 KingbaseES会在验证字符串转换为有效日期后将其视为DATE值。

KingbaseES数据库提供了许多内置数据类型,和用户自定义类型。本文就针对KingbaseES中的内置数据类型中的字符数据类型展开。下表为KES的字符数据类型

名字

描述

character varying[(n [char | byte])])

varchar(n [char | byte])

varchar2(n [char | byte])

nvarchar2(n [char | byte])

nvarchar(n [char | byte])

有限制的变长

n取值最小为 1 字节或 1 字符

最大10485760字节或字符

n缺省值为1。

char 或 byte 的默认值由

NLS_LENGTH_SEMANTICS 确定。

(n可以取'*',表示不限制长度)

character(n [char | byte])

char(n [char | byte])

指定长度的定长字符

最大长度是10485760个字节或者字符

n缺省值为1

char 或 byte 的默认值由

NLS_LENGTH_SEMANTICS 确定。

text

无限变长,存储任何长度的字符串

存储最大值为1G。

表1 字符类型

字符数据类型

2.1 character[(n [char | byte])]数据类型

语法:character[(n [char | byte])]

别名:char[(n [char | byte])]

定长字符串,n 限定字符串长度,如果显式指定 char,则表示n个字符长度;如果显式指定byte,则表示n个字节长度;

如果没有显式指定,则以系统参数nls_length_semantics为准,若系统参数 nls_length_semantics 为 char,则以字符为单位,否则以字节为单位。

set nls_length_semantics = 'char'; --参数设置

值域:定长,不足定义长度时在最右边以空格补齐。n 的最大值为 10485760,最小值为1,默认值为1。如果字符串的长度超出 n,则按照 SQL 标准截断 (兼容PostgreSQL模式下,超出部分都是空格) 或报错。

4个char只能有4个数、英文字符或者汉字,剩余的长度用空格补齐。这里的n byte是可以为中文字符的,一个中文字符占2个byte。

2.2. character varying[(n [char | byte])] 数据类型

语法:character varying[(n [char | byte])]

别名:

varchar[(n [char | byte])]

varchar2[(n [char | byte])]

nvarchar2[(n [char | byte])]

nvarchar[(n [char |byte])]

变长字符串,如果显式指定了 char,则表示n个字符长度;如果显式指定byte,则表示n个字节长度; 如果没有显式指定,则以系统参数 nls_length_semantics为准,若系统参数 nls_length_semantics 为 char,则以字符为单位,否则以字节为单位。

值域:变长,有长度限制。字符串长度小于 n 时不在字符串右边用空格补齐。n 的最大值为 10485760。如果n缺省,则character varying 表示接受任何长度的串。

如果是我们明确地把一个值造型成character varying(n)或者character(n), 那么超长的值将被截断成n个字符,而不会抛出错误

INSERT INTO test2 VALUES ('too long'::varchar(5)); --指定长度

SELECT b, char_length(b) FROM test2;

b | char_length

-------+-------------

too l | 5

在KingbaseES里另外还有两种定长字符类型,在表2里显示。name类型只用于在内部系统目录中存储标识符并且不是给一般用户使用的。该类型长度当前定为 64 字节(63可用字符加结束符)但在C源代码应该使用常量 NAMEDATALEN引用。这个长度是在编译的时候设置的(因而可以为特殊用途调整)。类型"char" 和 char(1)是不一样的,它只用了一个字节的存储空间。它在系统内部用于系统目录当做简化的枚举类型用。

名字

存储尺寸

描述

"char"

1字节

单字节内部类型

name

64字节

用于对象名的内部类型

表2 特殊字符类型

2.3. TEXT 数据类型

语法:TEXT

变长字符串类型。其字符串的长度最大为 1G。使用该类型存储长的文本串。

参考资料

提供该题目相关内容在产品手册中可以系统学习的位置,例如:

《KingbaseES V8.6 --用户手册》

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐