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

时间: 2024-08-03 18:53:44

oracle汉字占用字节长度的相关文章

Oracle汉字占用字节数的问题

在oracle中一个字符特别是中文字符占几个字节是与字符集有关的. 比如GBK,汉字就会占两个字节,英文1个:如果是UTF-8,汉字一般占3个字节,英文还是1个.但是一般情况下,我们都认为是两个字节处理,因为oracle安装时候默认我们都选择GBK的编码格式,但是我们在页面做输入字符串长度的校验的时候,还是以数据库设计字段最大长度除3来作为最大长度-----防止数据库移植时设置不同编码格式. 查看字符串占用的字符数: select length('12中华') from dual;     --

JDBC读取Oracle的US7ASCII编码中文乱码及不同编码下汉字占用字节的问题

数据库版本号:Oracle 10g 字符集:SIMPLIFIED CHINESE_CHINA.US7ASCII JDK:1.6.0_45 Oracle驱动:ojdbc14.jar 使用JDBC操作数据库,获取连接.运行SQL没有问题.可是,查询出来的结果中,全部汉字,均显示为乱码. debug查看到在数据从数据库中获取出来的时候,就已经是乱码,而使用PL/SQL等工具,均显示正常. 不知是否Oracle的驱动,在进行汉字处理的时候,使用了系统默认的字符集?此时,本着死马当活马医的理念,使用下对汉

Oracle一个中文汉字占用几个字节

Oracle 一个中文汉字 占用几个字节,要根据Oracle中字符集编码决定   查看oracle server端字符集 select userenv('language') from dual; 如果显示如下,一个汉字占用两个字节 SIMPLIFIED CHINESE_CHINA.ZHS16GBK 如果显示如下,一个汉字占用三个字节 SIMPLIFIED CHINESE_CHINA.AL32UTF8 可以用以下语句查询一个汉字占用的字节长度 select lengthb('你') from d

Oracle 汉字在不同字符集下所占字节

今天发现了一个问题,一个长度设置为2000字节的字段,插入一条长度为1000的汉字数据,竟然报错了. 一个汉字占两个字节,按理说刚好是2000个字节.但通过查看日志,发现插入数据的长度为3000字节. 百度了一下,原来是不同的字符集造成的. 一般情况下,数据库的NLS_CHARACTERSET 为AL32UTF8或UTF8,即一个汉字占用三到四个字节.如果NLS_CHARACTERSET为ZHS16GBK,则一个字符占用两个字节. 而公司的运行环境上是AL32UTF8,因此一个汉字占到了3个字节

utf-8中的汉字占用多少字节

转载:http://blog.csdn.net/chummyhe89/article/details/7777613 占2个字节的:〇 占3个字节的:基本等同于GBK,含21000多个汉字 占4个字节的:中日韩超大字符集里面的汉字,有5万多个 一个utf8数字占1个字节 一个utf8英文字母占1个字节 在查找 UTF-8 编码资料时发现,很多的帖子说的 UTF-8 编码里,一个汉字占用3个字节,有的还做了个证明,大概是这样的,创建一个没有BOM的UTF-8编码的文本文件,里面保存了几个汉字,然后

Oracle汉字用户名数据脱敏长度不变,rpad函数使用

信息安全考虑,有时需要对用户名称进行数据脱敏. 针对Oracle数据库,进行取数数据脱敏处理 脱敏规则: 长度小于9个字符,只保留前3个汉字与后3个汉字,中间全部由*填充. 长度9个字及以上及奇数,隐去中间3个字:长度10个字及以上及奇数,隐去中间4个字. 例如: 公司名称:宇宙无敌厉害的超级大公司的杭州分公司 字段长度:18 脱敏后:宇宙无敌厉害的****司的杭州分公司 可实现的正确答案: select t.no, ---公司编号 case when length(t.name)<=8 the

Oracle varchar2最大支持长度(转)

oerr ora 0650206502, 00000, "PL/SQL: numeric or value error%s"// *Cause: An arithmetic, numeric, string, conversion, or constraint error// occurred. For example, this error occurs if an attempt is made to// assign the value NULL to a variable de

java String长度与varchar长度匹配理解(字符和字节长度理解)

string中的length()长度,返回的是char的数量,每个char可以存储世界上任何类型的文字和字符,一个char 而Oracle库中的指定varchar,指的是字节长度.不是字符.字符和字节之间还有编码格式的转换嘞,对应具体一个字符用多少字节编码问题. 而Oracle库中的指定varchar,指的是字节长度.不是字符.字符和字节之间还有编码格式的转换嘞,对应具体一个字符用多少字节编码问题. 而Oracle库中的指定varchar,指的是字节长度.不是字符.字符和字节之间还有编码格式的转

mysql5.1中utf8编码下一个汉字占用一个char的疑惑

最近发现Oracle和MySQL的字段长度的计算不一样(都是UTF8编码),比如: 在Oracle下定义:name varchar2(10) ,name字段能存放:10个字符或3个汉字 在MySQL下定义:name varchar(10),name字段能存放:10个字符或10个汉字 从上面可以得知:在oracle下,1个汉字=3个字节 为什么在 MySQL 下,1个汉字=1个字节 呢?? 经查,说:MySQL5 以后 varchar 的单位是字符了,而 oracle 的varchar2 是字节