KES的字符数据类型

字符数据类型

字符数据类型存储字符(字母数字)数据,包括单词和自由格式文本,以数据库字符集或国际字符集形式存储。比其他数据类型的限制少,具有较少的属性。例如,字符列可以存储所有字母数字值,但数值列只能存储数值。

字符数据存储在字符串中,其字节值与建库时指定的字符集对应,如 7 位 ASCII 或 EBCDIC。KingbaseES数据库支持单字节和多字节字符集。

表 3.1.29 字符类型

名字

描述

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])

char(n [char | byte])

指定长度的定长字符

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

n缺省值为1

char 或 byte 的默认值由

NLS_LENGTH_SEMANTICS 确定。

text

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

存储最大值为1G。

longtext

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

存储最大值为1G。

mediumtext

指定长度变长,存储长度最大为

16777215个字符字符串。

tinytext

指定长度变长,存储长度最大为

255个字符。

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

语法:

character[(n [char | byte])]

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

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

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

值域:

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

示例:

  1. nls_length_semantics为 缺省是 char 的情况

set nls_length_semantics = 'char';
create table test_default_char (col char(4));
insert into test_default_char values ('1234');
insert into test_default_char values ('12345');
ERROR:  value too large for column "public"."test_default_char"."col" (actual:5, maximum:4)
insert into test_default_char values ('一二');
insert into test_default_char values ('一二三');
select col, length(col) from test_default_char;
   COL   | LENGTH
---------+--------
 1234    |      4
 一二    |      4
 一二三  |      4
  1. nls_length_semantics 缺省是 byte 的情况

set nls_length_semantics = 'byte';
create table test_default_byte (col char(4));
insert into test_default_byte values ('1234');
insert into test_default_byte values ('12345');
ERROR:  value too large for column "public"."test_default_byte"."col" (actual:5, maximum:4)
insert into test_default_byte values ('一');
insert into test_default_byte values ('一二三');
ERROR:  value too large for column "public"."test_default_byte"."col" (actual:9, maximum:4)
select col, length(col) from test_default_byte;
 COL  | LENGTH
------+--------
 1234 |      4
 一   |      2
  1. 显式指定是 byte 的情况

create table test_byte (col char(4 byte));
insert into test_byte values ('1234');
insert into test_byte values ('12345');
ERROR:  value too large for column "public"."test_byte"."col" (actual:5, maximum:4)
insert into test_byte values ('一');
insert into test_byte values ('一二三');
ERROR:  value too large for column "public"."test_byte"."col" (actual:9, maximum:4)
select col, length(col) from test_byte;
 COL  | LENGTH
------+--------
 1234 |      4
 一   |      2
  1. 显式指定是 char 的情况

create table test_char (col char(4 char));
insert into test_char values ('1234');
insert into test_char values ('12345');
ERROR:  value too large for column "public"."test_char"."col" (actual:5, maximum:4)
insert into test_char values ('一二三四');
insert into test_char values ('一二三四五');
ERROR:  value too large for column "public"."test_char"."col" (actual:5, maximum:4)
select col, length(col) from test_char;
   COL    | LENGTH
----------+--------
 1234     |      4
 一二三四 |      4
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 表示接受任何长度的串。

示例:

  1. nls_length_semantics 缺省是 char 的情况

set nls_length_semantics = 'char';
create table test_default_varchar (col varchar(4));
insert into test_default_varchar values ('1234');
insert into test_default_varchar values ('12345');
ERROR:  value too large for column "public"."test_default_varchar"."col" (actual:5, maximum:4)
insert into test_default_varchar values ('一二');
insert into test_default_varchar values ('一二三');
select col, length(col) from test_default_varchar;
  COL   | LENGTH
--------+--------
 1234   |      4
 一二   |      2
 一二三 |      3
  1. nls_length_semantics 缺省是 byte 的情况

set nls_length_semantics = 'byte';
create table test_default_varbyte (col varchar(4));
insert into test_default_varbyte values ('1234');
insert into test_default_varbyte values ('12345');
ERROR:  value too large for column "public"."test_default_varbyte"."col" (actual:5, maximum:4)
insert into test_default_varbyte values ('一');
insert into test_default_varbyte values ('一二三');
ERROR:  value too large for column "public"."test_default_varbyte"."col" (actual:9, maximum:4)
select col, length(col) from test_default_varbyte;
 COL  | LENGTH
------+--------
1234   |      4
一     |      1
  1. 显式指定是 byte 的情况

create table test_varbyte (col varchar(4 byte));
insert into test_varbyte values ('1234');
insert into test_varbyte values ('12345');
ERROR:  value too large for column "public"."test_varbyte"."col" (actual:5, maximum:4)
insert into test_varbyte values ('一');
insert into test_varbyte values ('一二三');
ERROR:  value too large for column "public"."test_varbyte"."col" (actual:9, maximum:4)
select col, length(col) from test_varbyte;
 COL  | LENGTH
------+--------
 1234 |      4
 一   |      1
  1. 显式指定是 char 的情况

create table test_varchar (col varchar(4 char));
insert into test_varchar values ('1234');
insert into test_varchar values ('12345');
ERROR:  value too large for column "public"."test_varchar"."col" (actual:5, maximum:4)
insert into test_varchar values ('一二三四');
insert into test_varchar values ('一二三四五');
ERROR:  value too large for column "public"."test_varchar"."col" (actual:15, maximum:4)
select col, length(col) from test_varchar;
   COL    | LENGTH
----------+--------
 1234     |      4
 一二三四  |      4
  1. 查看字符个数

CREATE TABLE test1 (a character(4));
INSERT INTO test1 VALUES ('ok');
SELECT a, char_length(a) FROM test1;

  a   | char_length
------+-------------
 ok   |           2


CREATE TABLE test2 (b varchar(5));
INSERT INTO test2 VALUES ('ok');
INSERT INTO test2 VALUES ('good      ');
ERROR:  value too large for column "public"."test2"."b" (actual:10, maximum:5)
INSERT INTO test2 VALUES ('too long');
ERROR:  value too large for column "public"."test2"."b" (actual:8, maximum:5)
INSERT INTO test2 VALUES ('too long'::varchar(5));
SELECT b, char_length(b) FROM test2;

   b   | char_length
-------+-------------
 ok    |           2
 too l |           5

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

表 3.1.30 特殊字符类型

名字

存储尺寸

描述

"char"

1字节

单字节内部类型

name

64字节

用于对象名的内部类型

TEXT 数据类型

语法:

TEXT

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

LONGTEXT 数据类型

语法:

LONGTEXT

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

MEDIUMTEXT 数据类型

语法:

MEDIUMTEXT

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

TINYTEXT 数据类型

语法:

TINYTEXT

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

  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值