oracle数据类型 varchar2 nvarchar2 区别

博客讨论了Oracle数据库中nvarchar2数据类型与字符集的问题,指出在GBK字符集下,汉字通常按2字节计算,但在某些情况下却按3字节计算,导致误解。文章强调了数据库、客户端及dmp文件的字符集差异,并提到了varchar2和nvarchar2的区别,特别是varchar2在不同字符集下的存储限制。作者在找寻问题原因的过程中,对数据库行业的信息准确性表示不满。
摘要由CSDN通过智能技术生成

被这两个数据类型坑死了

某个表的字段是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的区别

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值