Oracle之数据类型问题
做项目涉及到Oracle数据库中数据类型:字符串型的问题
我不太清楚varchar(32)到底代表着什么?
通过搜索了解到:oracle中有三种常用的类型:varchar2(byte),varchar2(char),nvarchar2()
varchar2(byte):默认表示方式,varchar2(100),就相当于varchar2(100 byte),表示最大字节数为100,强调空间大小。如果数据库使用GBK编码,那么一个汉字占用2个字节,如果用UTF8,一个汉字占用3个字节
varchar2(char):表示最大字符数为100,强调个数。无论是数字、字母、汉字都是一个字符,最多写100个,当然,汉字越多,占用的空间越大,因为一个汉字2或者3个字节。
nvarchar2():没有字节字符之分,类似于varchar2(char),只不过nvarchar2()屏蔽数据库编码,无论是何种编码,nvarchar2()中一个汉字都占用2个字节
实际应用中,可能会有这样的写法:nvarchar2(1400char),看似一切正常,实则不然,如果全是汉字的话,1400*3字节超过了咱们说的4000字节,而多出来的数据就不被存储
故对于GBK编码来说:安全写法为varchar2(2000char),nvarchar2(2000)
对于UTF8编码来说:安全写法为varchar2(1333),nvarchar2(2000)