ORACLE修改数据库的字符集编码为UTF-8
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ORACLE修改数据库的字符集编码为UTF-8
1、查看数据库字符集?数据库服务器字符集:select * from nls_database_parameters,其来源于props$,是
表⽰数据库的字符集。
客户端字符集环境:select * from nls_instance_parameters,其来源于v$parameter,
表⽰客户端的字符集的设置,可能是参数⽂件,环境变量或者是注册表会话字符集环境
select * from nls_session_parameters,其来源于v$nls_parameters,表⽰会话⾃⼰的
设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将
与nls_instance_parameters⼀致。
客户端的字符集要求与服务器⼀致,才能正确显⽰数据库的⾮Ascii字符。
如果多个设置
存在的时候,alter session>环境变量>注册表>参数⽂件字符集要求⼀致,但是语⾔设置
却可以不同,语⾔设置建议⽤英⽂。
如字符集是zhs16gbk,则nls_lang可以是
American_America.zhs16gbk。
2、修改Oracle的字符集,如下例把字符集GB2312修改为UTF-8 步骤:
1.在SQL*PLUS 中,以DBA登录 conn ⽤户名 as sysdba
2.执⾏转换语句: SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET UTF8;
SHUTDOWN IMMEDIATE; STARTUP;
注意:如果没有⼤对象,在使⽤过程中进⾏语⾔转换没有什么影响,(切记设定的字符集
必须是ORACLE⽀持,不然不能start)按上⾯的做法就可以,但是可能会出现
ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists
ORA-12717: 存在 NCLOB, NCHAR 或 NVARCHAR2 数据时, 不能发出 ALTER DATABASENATIONAL CHARACTER SET 命令这样的提⽰信息
要解决这个问题有两种⽅法⼀个是,利⽤INTERNAL_USE 关键字修改区域设置,还有⼀个是利⽤re-create,但是re-create有点复杂,
所以请⽤internal_use,
SHUTDOWN IMMEDIATE;
STARTUP MOUNT EXCLUSIVE;
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
ALTER DATABASE OPEN;
ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE UTF8;
SHUTDOWN IMMEDIATE;
STARTUP;
如果按上⾯的做法做,National charset的区域设置就没有问题。