Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4042241
  • 博文数量: 536
  • 博客积分: 10470
  • 博客等级: 上将
  • 技术积分: 4825
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-26 14:08
文章分类

全部博文(536)

文章存档

2024年(3)

2021年(1)

2019年(1)

2017年(1)

2016年(2)

2013年(2)

2012年(10)

2011年(43)

2010年(10)

2009年(17)

2008年(121)

2007年(252)

2006年(73)

分类: Oracle

2024-07-02 11:35:26

Oracle数据库的varchar2(N){BANNED}最佳多可以储存多少个中文字符呢?

varchar2(N char)可以储存N个中文字符(一个中文字符数据,GBK正常占用2个字节,UTF-8占用3个字节数据)
varchar2(N byte)可以储存N个字节数据
varchar2(N)对应应该是char还是byte由数据库参数: nls_length_semantics 控制。
类似:
SQL> select name,value from v$parameter where name='nls_length_semantics';
NAME
----------------------------------------------------------------------------
VALUE
----------------------------------------------------------------------------
nls_length_semantics
BYTE
这个数据库的varchar2(N)对应就是varchar2(N byte)




varchar2(4000 char)就可以储存4000个中文字符吗?
通过查询Oracle文档和测试发现:
varchar2(N char)/varchar2(N byte)在:12c以前{BANNED}最佳多只能储存4000个字节!注意是字节。
对应GBK字符集{BANNED}最佳多可以储存2000个中文字符。
UTF-8字符集应该就是4000/3=1333个中文字符。




12c以后(含12c)
select count(1) from v$parameter where upper(name)='MAX_STRING_SIZE' AND upper(value)='EXTENDED'
如果返回为1:varchar2(N)N{BANNED}最佳大为32767个字节。
返回为0:{BANNED}最佳大储存4000个字节。(和12c以前就一样)
也就是说varchar2(4000 char),MAX_STRING_SIZE为EXTENDED时候,{BANNED}最佳大可以储存4000个中文字符串,因为4000个中文字符对应字节数为:4000*2=8000 or 4000*3=12000都没有超过32767个字节,所以是可以储存4000个中文字符的。

varchar2(32767 char){BANNED}最佳大可以储存多少个中文字符呢?GBK就是16383,UTF-8就是10922


类似的nvarchar2和这个varchar2类似。
char(n char) {BANNED}最佳大储存2000字节,n个中文字符。这两个条件是同时起作用的,任何一个超过上限就会报错。




Oracle 10.2的文档:
VARCHAR2(size [BYTE | CHAR]) 
Variable-length character string having maximum length size bytes or characters. Maximum size is 4000 bytes or characters, and minimum is 1 byte or 1 character. You must specify size for VARCHAR2.
BYTE indicates that the column will have byte length semantics; CHAR indicates that the column will have character semantics.




NVARCHAR2(size) 
Variable-length Unicode character string having maximum length size characters. The number of bytes can be up to two times size for AL16UTF16 encoding and three times size for UTF8 encoding. Maximum size is determined by the national character set definition, with an upper limit of 4000 bytes. You must specify size for NVARCHAR2.




CHAR [(size [BYTE | CHAR])] 
Fixed-length character data of length size bytes. Maximum size is 2000 bytes or characters. Default and minimum size is 1 byte.
BYTE and CHAR have the same semantics as for VARCHAR2.




NCHAR[(size)]
Fixed-length character data of length size characters. The number of bytes can be up to two times size for AL16UTF16 encoding and three times size for UTF8 encoding. Maximum size is determined by the national character set definition, with an upper limit of 2000 bytes. Default and minimum size is 1 character.




19c文档:
VARCHAR2(size [BYTE | CHAR])
Variable-length character string having maximum length size bytes or characters. You must specify size for VARCHAR2. Minimum size is 1 byte or 1 character. Maximum size is:
32767 bytes or characters if MAX_STRING_SIZE = EXTENDED
4000 bytes or characters if MAX_STRING_SIZE = STANDARD
Refer to Extended Data Types for more information on the MAX_STRING_SIZE initialization parameter.
BYTE indicates that the column will have byte length semantics. CHAR indicates that the column will have character semantics.


阅读(134) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~