欢迎投稿

今日深度:

oracle汉字占用字节长度,oracle汉字字节

oracle汉字占用字节长度,oracle汉字字节


1、        今天调查一个oracle数据库问题的时候,发现在11g中一个汉字占2个字节,在10g中占3个字节,导致将11g数据库中的数据导入到10g的时候总是出错,开始的时候还以为是11g和10g的版本不一样,汉字占用字节数不一样,后来一想,oracle不会这么干吧,那样差别也太大了,后来一调查,发现是跟oracle的字符集编码有关:

           如果是以下字符集,一个汉字占用2个字节:      SIMPLIFIED CHINESE_CHINA.ZHS16GBK            如果是以下字符集,一个汉字占用3个字节:      SIMPLIFIED CHINESE_CHINA.AL32UTF8     (1)查看oracle字符集可以用下面的sql文查看:          select userenv('language') from dual   (2)查看当前oracle环境中一个汉字占多少个字节可以用下面的sql文查看:          select lengthb('啊') from dual     关于oracle字符集相关的知识(包括字符集查看和修改),主要参照:          http://www.cnblogs.com/rootq/articles/2049324.html          http://blog.csdn.net/uestcong/article/details/7348008

oracle汉字占多少字节问题

之前本人认为一个汉字都是占两个字节的,MSSQL Server如此(至少在我的理解范围之内,如果有误还请大家纠正)。但是最近在使用Oracle数据库,发现了一些特殊的东西,那就是,当你用两个函数(分别是length和lengthb,这两个函数到底是干什么用的,我想不需要我说明,大家查帮助就可以了)进行查询时,发现结果是lengthb是length的三倍(当然前提是length函数中的参数都是汉字了),这就奇怪了,不是说汉字占两个字节吗?怎么这里变成了三个?于是上网找资料,还真被我找到了。这个其实和Oracle的配置是相关的,用以下语句查询:select * from v$nls_parameters t where t.PARAMETER='NLS_CHARACTERSET';可以查询到当前数据库的字符集,如果value=ZHS16GBK,那么一个汉字占用2个字节,如果value=AL32UTF8,那么一个汉字占用3个字节。于是查询了一下本人的数据库,字符集果然是AL32UTF8(这是Oracle数据库默认的)。
 

ORACLE中一个字符占多少字节?

22.1 问题描述或许你会说一个中文字符占2个字节,这是一定的?如何计算一个字符串的字节数?22.2 解决方案在oracle中一个字符特别是中文占几个字节是不同的。比如我创立一个表create table test_ly(a varchar2(4),b nvarchar2(4))你说a列能插入两个汉字吗?错!最多能插入一个汉字加一个字母(或数字)。这是为什么?因为一个汉字在a字段中占了3个字节,其他字符(比如数字或者字母或者英文标点符号)占1个字节,你说b列最多能插入多少个汉字,2个?错!b列最多能插入4个汉字,b列的一个汉字或者其他字符(比如数字或者字母或者英文标点符号)占2个字节。 由此可见,N开头的字段类型(比如NCHAR,NVARCHAR2)中,任何一个字符(包括一个汉字)占2个字节,统一的。不以N开头的字段类型(比如CHAR,VARCHAR2)中,unicode字符(比如汉字)占3个字节,其他字符占1个字节。 如何求一个字符串占用的字符数和字节数?Length 函数求得是占用字符数,lengthb或者vsize函数求得是占用字节数。你说 中华12 这个字符串占用了多少字符,字节?看sql返回值便清楚了。select length('中华12') from dual --返回4,也就是占用4个字符select lengthb('中华12') from dual --返回8,也就是占用8个字节,其中中华儿子各占3个字节,而12两个字符各占一个字节select lengthb(N'中华1') from dual --返回6,这是将字符串转换成为unicode字符串后,每个字符占用2个字节,3个就是6个字节select length(N'中华1') from dual --返回3,因为只有3个字符嘛。 字符串类型字段默认的长度是以字节为单位的,具体取决于参数nls_length_semantics 的值(使用show parameters可以看到这个参数的值),默认是BYTE,也就是以字节为单位的,如果是CHAR则是以字符为单位的。表的某列可以使用字符为单位吗?当然可以,比如这样创建即可:create table test_ly(a varchar2(4 char)) 这样a列就最多能保存4个字符,而不是4个字节了。
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/4403.html NewsArticle oracle汉字占用字节长度,oracle汉字字节 1、 今天调查一个oracle数据库问题的时候,发现在11g中一个汉字占2个字节,在10g中占3个字节,导致将11g数据库中的数据导入到10g的时候总是出错...
评论暂时关闭