前言
在历史数据转换项目中遇到中文字符插入问题:
1. 字符的长度明明是正常,可是偏偏提示不能插入,列值过大
通过寻找问题,理解问题,上网查找等等,终于找到了问题的根源所在:
US7ASCII编码英文字符一般是以一个字节来存储的,7位的编码方案最多只能
代表128个字符
ASCII编码可以表示的最大字符数是256,其实英文字符并没有那么多,一般只
用前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他
一些符号,而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放
英文的制表符、部分音标字符等等的一些其他符号.用来处理英文没有什么问
题前128个(最高位为0),其中包括了控制字符、数字、大小写字母和其他
一些符号 而最高位为1的另128个字符被成为“扩展ASCII”,一般用来存放
英文的制表符、部分音标字符等等的一些其他符号.用来处理英文没有什么问
题
1.1 汉字占用2个字节(GB2312)
1.2 汉字占用3个字节(AL32UTF8)
UTF= UCS Transformation Format UCS转换格式
UTF-8定义了一种“区间规则”,可以和ASCII编码保持最大程度的兼容 UTF-8有点类似于Haffman编码,它将Unicode编码为
00000000-0000007F的字符,用单个字节来表示;
00000080-000007FF的字符用两个字节表示
00000800-0000FFFF的字符用3字节表示
Unicode-16规范没有指定FFFF以上的字符,
UTF-8最多是使用3个字节来表示一个字符。
但理论上来说,UTF-8最多需要用6字节表示一个字符
2. clob字段,clob长度设为2g,但在插入时,提示不能插入
一、什么是oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响oracle数据库字符集最重要的参数是NLS_LANG参数。它的格式如下:
NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。其中
Language 指定服务器消息的语言,territory 指定服务器的日期和数字格式,charset 指定字符集。如:AMERICAN _ AMERICA. ZHS16GBK
1、查询oracle server端的字符集
select userenv(‘language’) from dual;
2、如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
select nls_charset_name(to_number('0354','xxxx')) from dual;
Result:ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
3、查询oracle client端的字符集
dos窗口里面自己设置,比如:
set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量
oracle的字符集有互相的包容关系。如us7ascii就是zhs16gbk的子集,从us7ascii到zhs16gbk不会有数据解释上的问题,不会有数据丢失。在所有的字符集中utf8应该是最大,因为它基于unicode,双字节保存字符(也因此在存储空间上占用更多)。
分享到:
相关推荐
GBK字符集(汉字完整版),所有汉字集
使用GDI32中API计算字符串的精确象素长度
常用汉字字符集 主要用于随机生成常用汉字 做汉字验证码
香港增补字符集香港增补字符集香港增补字符集香港增补字符集[参照].pdf
用指针计算字符串长度,简单的小程序,c语言
js计算字符串长度,可以输入中文、英文、数字、中英文数字混合等,最后计算结果为字符串所占字节个数
SQL SERVER 字符集问题之一解决
Oracle 修改字符集Oracle 修改字符集Oracle 修改字符集
GB 18030-2005 信息技术 中文编码字符集
* 针对汉字 进行计算长度 * @param string 计算的字符串 * @param shuJuKuHanZhiChangDu 汉字所占字符大小 * @return int 字符串长度 */ public static int stringOfSize(String string,int ...
关于GBK和Unicode字符集转换乱码问题
oracle字符集的查看,oracle客户端字符集的修改
本规范是按笔画排序的汉字、字序规范,给出了GB 13000.1字符集汉字字序的定序规范该字集所收20902个汉字的字序表。本规范主要适用于汉字的信息处理,排序检索、辞书编纂等方面。
js字符长度的计算和点点点代替字符,对于列表中名称的长度过长时可以用...代替。
Oracle字符集的问题.总结了一些项目中的实际问题,和解决办法
Oracle数据库字符集问题解析
中日韩汉字超大字符集
oracle中文字符集解决方法。
MYSQL修改字符集默认问题
GB-T 2312-1980 信息交换用汉字编码字符集 基本集