文档首页> 数据仓库服务 GaussDB(DWS)> 故障排除> 数据库使用> VARCHAR(n)存储中文字符,提示value too long for type character varying?
更新时间:2024-01-25 GMT+08:00

VARCHAR(n)存储中文字符,提示value too long for type character varying?

问题现象

VARCHAR(18)的字段,存储8个中文字符长度不够,报如下所示的错误:

1
org.postgresql.util.PSQLException: ERROR: value too long for type character varying(18)

原因分析

以UTF-8编码为例,一个中文占3~4个字节,即8个中文占24~32字节,超出VARCHAR(18)的最大18字节限制。

当表中某一字段包含有中文字符时,可使用char_length或length函数来查询字段字符长度,使用lengthb函数来查询字段字节长度。

1
2
3
4
5
 SELECT length('数据库database');
 length
--------
     11
(1 row)
1
2
3
4
5
SELECT lengthb('数据库database');
 length
--------
     17
(1 row)

处理方法

varchar(n)为变长类型,n代表可存储的最大字节数。中文字符通常占用3~4个字节。

请根据实际的中文字符长度,增加该字段的字段长度。示例中某字段要存储8个中文字符,则需要设置n至少为32,即VARCHAR(32)。