
# VARCHAR(n)存储中文字符，提示value too long for type character varying？
#### 问题现象
VARCHAR(18)的字段，存储8个中文字符长度不够，报如下所示的错误：
```
org.postgresql.util.PSQLException: ERROR: value too long for type character varying(18)
```
#### 原因分析
以UTF-8编码为例，一个中文占3\~4个字节，即8个中文占24\~32字节，超出VARCHAR(18)的最大18字节限制。
**常见场景**：客户从源端MySQL数据库导入到DWS，MySQL中varchar(n) n指的是字符数，DWS中指的是字节数。在有汉字存在时，相同长度会报错字段长度不够。
当表中某一字段包含有中文字符时，可使用char_length或length函数来查询字段字符长度，使用lengthb函数来查询字段字节长度。
```
SELECT length('数据库database');
 length
--------
     11
(1 row)
```
```
SELECT lengthb('数据库database');
 lengthb
--------
     17
(1 row)
```
#### 处理方法
varchar(n)为变长类型，n代表可存储的最大字节数。中文字符通常占用3\~4个字节。
请根据实际的中文字符长度，增加该字段的字段长度。示例中某字段要存储8个中文字符，则需要设置n至少为32，即VARCHAR(32)。
