字符型
SmartESQL 字符数据类型为单字节(例如 ASCII)或双字节(例如 Unicode)字符数组提供了固定长度和可变长度的存储选项。字符数组的大小不能超过 64KB。对于必须存储超过 64KB 数据的字段,可以使用 BLOB。
定长字符字段
定长字符数组必须声明指定的长度:例如 CHAR(n)、VARCHAR(n)、LONGVARCHAR(n) 或 UNICODE(n)。(请注意,数据类型名称不区分大小写;即 CHAR 和 char 是等效的)。例如,以下语句创建一个具有两个定长字符字段的表:
create table t( c char(30), u unicode(30) );为固定长度字符数组分配的存储空间量对于 CHAR(n) 类型是指定的字节数,而对于 UNICODE(n) 类型则是指定长度的两倍。例如,以下元表查询显示了上述声明的实际存储分配情况:
select FieldName, FieldSize from Metatable where TableName = 't';
FieldName FieldSize
----------------------------------------------------------------------
c 30
u 60单个字段的存储空间不能超过 64KB(65536 字节)。每个数据库字段都需要一些额外的字节开销。因此,对于 CHAR(n) 声明,最大长度 n 为 65527;对于 UNICODE(n),n 的最大值为 32763。
如果向 CHAR(n) 字段插入的字符数据长度超过其固定长度,则存储的值将被截断至声明的长度。例如:
create table t(c char(3), u unicode(3));
insert into t values('1234567', '1234567');
select * from t;
c u
-------------------------------------------
123 123可变长度字符字段
对于 CHAR 或 UNICODE 类型,若未指定长度,或者将字段声明为 VARCHAR、LONGVARCHAR 或 STRING 类型,则可声明可变长度字符数组。实际上,LONGVARCHAR 和 STRING 实际上是 VARCHAR 的别名。所有可变长度字符数组在内部都映射到 SmartEDB 的字符串(单字节)和 nstring(双字节)类型;元表中的 FieldTypeName 为 String 或 Unicode。例如,在以下表定义中,所有字段声明都是等效的:
create table t(c char, v varchar, lv longvarchar, s string);
select FieldName, FieldTypeName, FieldSize from Metatable where TableName = 't';
FieldName FieldTypeName FieldSize
------------------------------------------------------------------------------
c String 0
v String 0
lv String 0
s String 0请注意,字段大小为 0 表示在实际插入值之前,不会为可变长度字段分配存储空间(除了用于可变大小存储的 2 字节或 4 字节地址)。
(有关详细信息,请参阅“基本数据类型”页面。)另外,对于固定长度的 UNICODE 字段,可变长度的 UNICODE 字段存储双字节字符数组。请注意以下声明中 FieldSize 的差异:
create table t2( u unicode(30), uv unicode);
select FieldName, FieldTypeName, FieldSize from Metatable where TableName = 't2';
FieldName FieldTypeName FieldSize
------------------------------------------------------------------------------
u Unicode 60
uv Unicode 0