有个学校oracle数据库的编码是GBK,而且库里边已经有很多生产数据了,现在想改成UTF8的,如果执行了这步 *** 作,会出现哪些问题?
我的回答:
因为utf8的库中文占3个byte,gbk占2个byte,所以会出现客户端乱码。
比较稳妥的方案是,再搭建一个oracle环境,设置成utf8编码,把旧的oracle数据迁移到新的utf8编码的oracle库中的环境。
oracle群里面peter的回答:
官方的方法是新建一个utf8的库再导入。
直接改内部视图的办法是错的,从不这样用,也不了解会有啥问题。
直接通过alter 方法直接修改 character为 UTF-8即可。sql>conn / as sysdba
sql>shutdown immediate
database closed.
database dismounted.
oracle instance shut down.
sql>startup mount
oracle instance started.
total system global area 135337420 bytes
fixed size 452044 bytes
variable size 109051904 bytes
database buffers 25165824 bytes
redo buffers 667648 bytes
database mounted.
sql>alter system enable restricted session
system altered.
sql>alter system set job_queue_processes=0
system altered.
sql>alter system set aq_tm_processes=0
system altered.
sql>alter database open
database altered.
sql>alter database character set internal_use UTF-8
sql>shutdown immediate
sql>startup
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。
影响Oracle数据库字符集最重要的参数是NLS_LANG参数。
它的格式如下: NLS_LANG = language_territory.charset
它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。
其中:
Language: 指定服务器消息的语言, 影响提示信息是中文还是英文
Territory: 指定服务器的日期和数字格式,
Charset: 指定字符集。
如:AMERICAN _ AMERICA. ZHS16GBK
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)