字符数据类型
📄字数 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 |
+-------+----------+