
# 字符类型
M-Compatibility支持的字符类型如[表1]所示。
 表1字符类型 
| 名称          | 描述                                                      | 存储空间           |
|:---|:---|:---|
| CHAR\[(n)\] | 定长字符串，不足补空格。 n是指字符长度，如不带精度n，默认精度为1。                     | 最大为255个字符      |
| VARCHAR(n)  | 变长字符串。n是指字符长度。                                          | 最大为65532个字节    |
| TEXT\[(n)\] | 变长字符串。n是指该类型的可选字符长度，指定n后将列创建为最小的但足以容纳n字符对应的字节长度的TEXT类型。 | 最大为65535个字节    |
| TINYTEXT    | 变长字符串。                                                  | 最大为255个字节      |
| MEDIUMTEXT  | 变长字符串。                                                  | 最大为16777215个字节 |
| LONGTEXT    | 变长字符串。                                                  | 最大为1GB-1个字节    |
   
![](https://support.huaweicloud.com/distributed-m-comp-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
- sql_mode参数值包含"strict_trans_tables"时，非法输入或者输入超过存储空间范围时，会报ERROR。
- sql_mode参数值不包含"strict_trans_tables"时，非法输入或者输入超过存储空间范围时，会返回截断后的值。
- sql_mode参数值包含"pad_char_to_full_length", CHAR类型作为表列和临时变量的数据类型时，输出带有尾部空格的字符串，否则输出不带尾部空格的字符串。
- 不支持\|\|连接符连接数据。
 
#### 示例
显示用字符串输出字符类型。
```
--创建CHAR类型表。
m_db=# CREATE TABLE text_type_t1  
(
    BT_COL1 CHAR(10)
);
--插入数据。
m_db=# INSERT INTO text_type_t1 VALUES ('text_test1');
--查询表中的数据。
m_db=# SELECT *  FROM text_type_t1;
  BT_COL1
------------
 text_test1
(1 row)
--删除表。
m_db=# DROP TABLE text_type_t1;
--创建VARCHAR类型表
m_db=# CREATE TABLE text_type_t2  
(
    BT_COL2 VARCHAR(10)
);
--插入数据。
m_db=# INSERT INTO text_type_t2 VALUES ('text_test2');
--查询表中的数据。
m_db=# SELECT *  FROM text_type_t2;
  BT_COL2
------------
 text_test2
(1 row)
--删除表。
m_db=# DROP TABLE text_type_t2;
--创建TEXT类型表
m_db=# CREATE TABLE text_type_t3  
(
    BT_COL3 TEXT
);
--插入数据。
m_db=# INSERT INTO text_type_t3 VALUES ('text_test3');
--查询表中的数据。
m_db=# SELECT *  FROM text_type_t3;
  BT_COL3
------------
 text_test3
(1 row)
--删除表。
m_db=# DROP TABLE text_type_t3;
--示例：CHAR类型。
--创建表。
m_db=# CREATE TABLE char_type_t1  
(
    BT_COL1 CHAR(5)
);
--严格模式下插入的数据长度超过类型规定的长度报错。
m_db=# SET SQL_MODE = 'strict_trans_tables,only_full_group_by,no_zero_in_date,no_zero_date,error_for_division_by_zero,
no_auto_create_user,no_engine_substitution';
SET
m_db=# INSERT INTO char_type_t1 VALUES ('too long');
ERROR:  value too long for type character(5)
CONTEXT:  referenced column: BT_COL1
--宽松模式下插入的数据长度超过类型规定的长度提示warning,数据截断插入。
m_db=# SET SQL_MODE = '';
SET
m_db=# INSERT INTO char_type_t1 VALUES ('too long');
WARNING:  value too long for type character(5)
CONTEXT:  referenced column: BT_COL1
INSERT 0 1
--查询表中的数据。
m_db=# SELECT * FROM char_type_t1;
m_db=# SELECT * FROM char_type_t1;
 BT_COL1
---------
 too l
(1 row)
--删除表。
m_db=# DROP TABLE char_type_t1;
```
