Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


字符数据类型

📄字数 1.7K
👁️阅读量 加载中...

XuguDB支持的字符数据类型分为两类:定长字符类型(CHAR),变长字符类型(VARCHAR);相关信息对比见下表。

数据类型长度长度允许范围存储方式
CHAR[(SIZE)]1 - 60000固定长度
VARCHAR[(SIZE)]1 - 60000可变长度

定长字符类型

CHAR[(SIZE)]

用于保存定长的字符串数据。

  • 若数据超过类型定义时的最大长度(SIZE单位:字符)时,则报错;或者把数据截断至最大长度后操作成功,并返回警告信息(取决于str_trunc_warning参数的值)。

  • 若不指定长度,CHAR类型默认允许存储一个字符长度的数据。

  • 对于中文等多字节字符,在不同字符集的库下,每个字符的字节长度不同,例如:UTF8库单个中文字符通常占3个字节长度,GBK库下占2个字节长度。

  • CHAR类型指定长度SIZE时,若插入的字符长度小于SIZE,并不会使用空格填充到SIZE长度;且当插入字符原串含有空格时,插入后会去除尾部空格,保留首部或中间空格(若有)。

  • SIZE可指定范围为1到60000的整数,若指定值不在此范围,数据库会抛出错误(VARCHAR相同)。

提示

  • 关键字 NCHAR、CHARACTER 是 CHAR 的映射类型,即使用效果等同。
  • 示例1
    创建含CHAR类型字段表,并演示str_trunc_warning参数不同值对超长字符串的处理结果。
sql
--关闭字符超长截断并警告参数
SQL> SET str_trunc_warning OFF;

SQL> CREATE TABLE tab_char(col_1 CHAR,col_2 CHAR(5));

SQL> INSERT INTO tab_char VALUES('一','测试字符');

--报错
SQL> INSERT INTO tab_char VALUES('ab','abcd');
Error: [E19230] 字段(col_no:0,col_name:COL_1)值错误(数据异常/字串超长)
SQL> INSERT INTO tab_char VALUES('a','abcdef');
Error: [E19230] 字段(col_no:1,col_name:COL_2)值错误(数据异常/字串超长)

--打开字符超长截断并警告参数
SQL> SET str_trunc_warning ON;

--执行成功并警告
SQL> INSERT INTO tab_char VALUES('cd','cdefgh');
Warning: [E17090] 数据异常/字串超长

--结果截断
SQL> SELECT * FROM tab_char;
+-------+----------+
| COL_1 |  COL_2   |
+-------+----------+
| 一    | 测试字符  |
| c     | cdefg    |
+-------+----------+

变长字符类型

VARCHAR[(SIZE)]]

用于保存变长的字符串数据。

  • 若数据超过类型定义时的最大长度(SIZE单位:字符)时,则报错;或者把数据截断至最大长度后操作成功,并返回警告信息(取决于str_trunc_warning参数的值)。

  • 若不指定长度,VARCHAR类型默认允许存储当前行记录除其他字段所占空间的剩余空间(行记录大小为 64K)。

  • 对于中文等多字节字符,在不同字符集的库下,每个字符的字节长度不同,例如:UTF8库单个中文字符通常占3个字节长度,GBK库下占2个字节长度。

  • VARCHAR类型当插入字符原串含有空格时,插入后同样会去除尾部空格,保留首部或中间空格(若有)。

提示

  • 关键字 TEXT、VARCHAR2、NVARCHAR、NVARCHAR2 是 VARCHAR 的映射类型,即使用效果等同。
  • 示例1
    创建含VARCHAR类型字段表,并演示开启或者关闭str_trunc_warning参数,对于超长字符串的处理方式。
sql
--关闭字符超长截断并警告参数
SQL> SET str_trunc_warning OFF;

SQL> CREATE TABLE tab_varchar(col_1 VARCHAR,col_2 VARCHAR(5));

SQL> INSERT INTO tab_varchar VALUES('一','测试字符');

SQL> INSERT INTO tab_varchar VALUES('ab','abcd');

--报错
SQL> INSERT INTO tab_varchar VALUES('a','abcdef');
Error: [E19230] 字段(col_no:1,col_name:COL_2)值错误(数据异常/字串超长)

--打开字符超长截断并警告参数
SQL> SET str_trunc_warning ON;

--执行成功并警告
SQL> INSERT INTO tab_varchar VALUES('cd','cdefgh');
Warning: [E17090] 数据异常/字串超长

--结果截断
SQL> SELECT * FROM tab_varchar;
+-------+----------+
| COL_1 |  COL_2   |
+-------+----------+
| 一    | 测试字符 |
| ab    | abcd     |
| cd    | cdefg    |
+-------+----------+