Duffblog
前进一步,看看,需要前进更大一步才可以。
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
::
5 随笔 :: 53 文章 :: 5 评论 :: 0 Trackbacks
<
2024年12月
>
日
一
二
三
四
五
六
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(2)
给我留言
查看公开留言
查看私人留言
随笔档案
2006年9月 (2)
2006年5月 (2)
2006年3月 (1)
文章分类
J2EE
(rss)
Java(17)
(rss)
Tomcat
(rss)
山路漫步(8)
(rss)
开源技术(2)
(rss)
技术文摘(18)
(rss)
文章档案
2006年12月 (8)
2006年11月 (2)
2006年10月 (7)
2006年9月 (4)
2006年8月 (8)
2006年7月 (2)
2006年6月 (6)
2006年5月 (6)
2006年4月 (10)
网站
http://blog.lupaworld.com/blog
JavaWorld TW
(rss)
台湾不错的Java方面的论坛.
最新评论
1. re: 结合Spring2.0和ActiveMQ进行异步消息调用(转)[未登录]
有个问题不明白,就是是否不用启动监听容器?那么接收端不用启动就能获取到消息了?
--leven
2. re: JVM的内存管理机制 java.lang.OutOfMemoryError: PermGen space [未登录]
不对啊,我个还是不行啊,我用了myeclipse,使用了hibernate,struts
--liu
3. re: (转)voa的学习技巧和经验
well written!it's better to wrote in English.That is professional.
--蒋文明
4. re: 如何正确地应用Runtime类调用程序
评论内容较长,点击标题查看
--pc
5. re: Spring的一些参考。(http://www.blogjava.net/calvin/category/2823.html)
评论内容较长,点击标题查看
--pc
阅读排行榜
1. Spring的一些参考。(http://www.blogjava.net/calvin/category/2823.html)(343)
2. 百名专家推荐适合中国人10大减压方法(转)(265)
3. 感叹!!!(247)
4. 随便写写关于Object(221)
5. 晃悠~~晃悠~~(188)
评论排行榜
1. Spring的一些参考。(http://www.blogjava.net/calvin/category/2823.html)(1)
2. 晃悠~~晃悠~~(0)
3. 百名专家推荐适合中国人10大减压方法(转)(0)
4. 感叹!!!(0)
5. 随便写写关于Object(0)
Oracle数据库字符集问题解析
经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下。
第一次迭代:掌握字符集方面的基本概念。
有些朋友可能会认为这是多此一举,但实际上正是由于对相关基本概念把握不清,才导致了诸多问题和疑问。
首先是字符集的概念。
我们知道,电子计算机最初是用来进行科学计算的(所以叫做“计算机”),但随着技术的发展,还需要计算机进行其它方面的应用处理。这就要求计算机不仅能处理数值,还能处理诸如文字、特殊符号等其它信息,而计算机本身能直接处理的只有数值信息,所以就要求对这些文字、符号信息进行数值编码,最初的字符集是我们都非常熟悉的ASCII,它是用7个二进制位来表示128个字符,而后来随着不同国家、组织的需要,出现了许许多多的字符集,如表示西欧字符的 ISO8859系列的字符集,表示汉字的GB2312-80、GBK等字符集。
字符集
的实质就是对一组特定的符号,分别赋予不同的数值编码,以便于计算机的处理。
字符集之间的转换。
字符集多了,就会带来一个问题,比如一个字符,在某一字符集中被编码为一个数值,而在另一个字符集中被编码为另一个数值,比如我来创造两个字符集demo_charset1与demo_charset2,在demo_charset1中,我规定了三个符号的编码为:A (0001),B(0010),?(1111);而在demo_charset2中,我也规定了三个符号的编码为:A(1001),C(1011),?(1111),这时我接到一个任务,要编写一个程序,负责在demo_charset1与demo_charset2之间进行转换。由于知道两个字符集的编码规则,对于demo_charset1中的0001,在转换为demo_charset2时,要将其编码改为1001;对于 demo_charset1中的1111,转换为demo_charset2时,其数值不变;而对于demo_charset1中的0010,其对应的字符为B,但在demo_charset2没有对应的字符,所以从理论上无法转换,对于所有这类无法转换的情况,我们可以将它们统一转换为目标字符集中的一个特殊字符(称为“替换字符”),比如在这里我们可以将?作为替换字符,所以B就转换为了?,出现了信息的丢失;同样道理,将demo_charset2 的C字符转换到demo_charset1时,也会出现信息丢失。
所以说,在字符集转换过程中,如果源字符集中的某个字符在目标字符集中没有定义,将会出现信息丢失。
数据库字符集的选择。
我们在创建数据库时,需要考虑的一个问题就是选择什么字符集与国家字符集(通过create database中的CHARACTER SET与NATIONAL CHARACTER SET子句指定)。考虑这个问题,我们必须要清楚数据库中都需要存储什么数据,如果只需要存储英文信息,那么选择US7ASCII作为字符集就可以;但是如果要存储中文,那么我们就需要选择能够支持中文的字符集(如ZHS16GBK);如果需要存储多国语言文字,那就要选择UTF8了。
数据库字符集的确定,实际上说明这个数据库所能处理的字符的集合及其编码方式,由于字符集选定后再进行更改会有诸多的限制,所以在数据库创建时一定要考虑清楚后再选择。
而我们许多朋友在创建数据库时,不考虑清楚,往往选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,所以
用这种字符集存储汉字信息从原则上说就是错误的。
虽然在有些时候选用这种字符集好象也能正常使用,但它会给数据库的使用与维护带来一系列的麻烦,在后面的迭代过程中我们将深入分析。
客户端的字符集。
有过一些Oracle使用经验的朋友,大多会知道通过NLS_LANG来设置客户端的情况,NLS_LANG由以下部分组成:NLS_LANG=< Language>_<Territory>.<Clients Characterset>,其中第三部分<Clients Characterset>的本意就是用来指明客户端操作系统缺省使用的字符集。所以按正规的用法,NLS_LANG应该按照客户端机器的实际情况进行配置,尤其对于字符集一项更是如此,这样Oracle就能够在最大程度上实现数据库字符集与客户端字符集的自动转换(当然是如果需要转换的话)。
总结一下第一次迭代的重点:
字符集:
将特定的符号集编码为计算机能够处理的数值;
字符集间的转换:
对于在源字符集与目标字符集都存在的符号,理论上转换将不会产生信息丢失;而对于在源字符集中存在而在目标字符集中不存在的符号,理论上转换将会产生信息丢失;
数据库字符集:
选择能够包含所有将要存储的信息符号的字符集;
客户端字符集设置:
指明客户端操作系统缺省使用的字符集。
具体看:
http://www.itpub.net/276524,1.html
posted on 2006-10-27 10:13
追球者
阅读(193)
评论(0)
编辑
收藏
所属分类:
技术文摘
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
“中文问题没商量”之Dom4j中的编码问题 (转)
管理 Eclipse 环境(Eclipse 维护的神秘艺术)
Oracle数据库字符集问题解析
ORACLE汉字显示的字符集问题(转)
Windows中查看端口占用的简单用法。
JVM的内存管理机制 java.lang.OutOfMemoryError: PermGen space
IT从业人员必看的10个论坛(转)
在 Java 应用程序中计划重复执行的任务(转)
Java虚拟机的 10 年(转)
编译原理学习导论(转)
Powered by:
BlogJava
Copyright © 追球者