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)。