在工作中,由于之前交接的项目中使用的是Mysql数据库,而在生产环境中,使用的是Oracle数据库,然后相同表结构,测试发现了插入到表时,中文字符超过了字段的长度。查看了Mysql和Oralce的表结构,超过长度的字段类型都是字符类型,Mysql的字段类型是Varchar(2000),Oracle的字段类型是Varchar2(2000)。插入相同中文字符个数为900个,Mysql和Oracle都是UTF-8编码,Mysql环境下没报错,而Orcale环境就爆长度超过。
通过网上查阅资料得知,Mysql5.0以上版本的Varchar(2000)表示的是2000个字符(假设2000都可用,忽略需要存储字符长度信息等),而Oracle的Varchar2(2000)表示的可以存储2000个字节。UTF-8编码下的900个中文字符最少为2700个字节,对于Mysql来说900个字符没超过2000个,不会报错,而对于Oracle来说,2700个字节已经超过了,所以报错长度超过错误。
Mysql的Varchar的详细信息可参考https://www.jb51.net/article/203958.htm