被这两个数据类型坑死了
某个表的字段是nvarchar2类型,我输入70个汉字和70个汉字夹杂英文,都是算作210的长度
这样每个字是按照3字节计算的
百度某篇文章的说法,查看数据库的字符集,一般默认都是GBK,那么汉字是算2字节的,UTF8是按照3字节计算的,我查看了字符集,是GBK,但我的数据库明明是按照utf8算的啊!
现在一些人啊,发文之前,能不能保证字节的文章的正确性!!!忍不住吐槽。
不过秉着先从自己这边找错误的原则,事情应该不是这样简单,继续百度,哦买噶,oracle
涉及三方面的字符集,
1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。
数据库服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集环境select * from nls_instance_parameters,其来源于v$parameter,
原来数据库服务端的是UTF8
不过还是要吐槽,为啥这么多的字符集都设置成GBK?!!难道不应该是UTF8吗?
以下为百度到的区别,经过验证
varchar2(size type),size最大为4000,type可为char或者byte,默认是byte。
varchar2最多存放4000字节的数据,不管type是char还是byte。所以如果你设置varchar2(4000 char),你可以存入4000个字母,但是不能存入4000个汉字。如果数据库字符集编码是GBK,那么varchar2最多能存放2000个汉字,如果字符集编码是UTF-8,那么则只能最多存放1333个汉字了。
nvarchar2(size),size最大值为2000,单位是字符,而且不管是汉字还是字母,每个字符的长度都是2个字节。所以nvarchar2类型的数据最多能存放2000个汉字,也最多只能存放2000个字母。并且nvarchar2不同于varchar2,他不受数据库字符集的影响。
这其中我们要注意的是单位!
还有个varchar 和varchar2的区别