今天在进行两个数据库的对比实验中发现这个问题
数据库使用UTF-8编码,在user表中有字段username,类型为VARCAHR(10),在MySQL中存储一条username为”商城用户“的数据,没有报错,但是在OpenGauss中报错:
ERROR: value too long for type character varying(10)
CONTEXT: referenced column: username
插入值的长度太长了,于是考虑OpenGauss中VARCAHR(n)中n表示最大存储n个字节,而不是n个字符。
在UTF-8编码中,一个字母和数字占1字节大小,大部分中文字符占3字节大小,因此在OpenGauss中VARCAHR(10)可以存10个数字或英文字母,但中文汉字最多只能存3个。
将username字段数据类型修改为VARCAHR(12),再次插入,成功了。
在 MySQL 4.0之前VARCAHR(n)也是表示最大存储n个字节,而后来的版本表示最大存储n个字符,不论是存储数字、字母还是中文都是可以存n个。在使用不同数据库时要注意这些细微的区别。