Oracle将字符编码从GBK转到UTF8,如何 *** 作比较稳妥?

Oracle将字符编码从GBK转到UTF8,如何 *** 作比较稳妥?,第1张

朋友问:

有个学校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的组成我们可以看出,真正影响数据库字符集的其实是第三部分。

所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10009264.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存