ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ORCALE字符集AL32UTF8和ZHS16GBK的互相转换

2021-07-14 22:32:56  阅读:203  来源: 互联网

标签:NLS ZHS16GBK 字符集 AL32UTF8 ORCALE SQL ALTER


一、AL32UTF8转成ZHS16GBK

cmd中输入“SQLPLUS”,回车,然后再在用户名下输入“SYS AS SYSDBA”,回车

密码后面输入“SYS”,回车。这里输入密码是隐式的,所以看不见,只要输入就好了。

这里输入SQL查询语句,select * from nls_database_parameters where parameter='NLS_CHARACTERSET'; 查看当前数据库字符集。

 

此时数据库服务器已启动,则先执行SHUTDOWN IMMEDIATE命令关闭数据库服务器,然后执行以下命令:注:每条sql语句都会有相应的提示,请输入时务必仔细阅读和等待

 
SQL>STARTUP MOUNT;
 
 
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
 
 
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
 
 
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
 
 
SQL>ALTER DATABASE OPEN;
 
 
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; //跳过超子集检测
 
 
SQL>ALTER DATABASE national CHARACTER SET INTERNAL ZHS16GBK;

这一行不起作用,执行后出错ORA-00933: SQL 命令未正确结束,不过执行上一行命令已经生效,其他文章里未提到本行。
 

继续运行:

1 2 3 4 SQL>SHUTDOWN IMMEDIATE;       SQL>STARTUP

 到这里就完成了字符集从AL32UTF8转成ZHS16GBK了。

 

=================================================

二、ZHS16GBK转成 AL32UTF8

SQL> select userenv('language') from dual;

这也可以查询oracle的字符集。

开始修改字符集:需要先关闭数据库 SHUTDOWN IMMEDIATE

 
SQL> startup mount

SQL> alter system enable restricted session;

SQL> alter system set job_queue_processes=0;

SQL> alter system set aq_tm_processes=0;

SQL> alter database open;

SQL> ALTER DATABASE character set INTERNAL_USE AL32UTF8;

SQL> shutdown immediate


SQL> startup
 

 

SQL> select userenv('language') from dual;

继续使用 select userenv('language') from dual;查询oracle字符集。

三、结论

1.不管是从AL32UTF8 到ZHS16GBK 还是从ZHS16GBK 到AL32UTF8 ,中文都不会乱码,会自动转换(导出导入过程中无报错),但是对于其他国家语言会有问题(比如印度,日本等文字)。

2.通过数据泵导出或导入的数据,与oracle用户操作系统参数NLS_LANG无关,编码自动与数据库参数NLS_CHARACTERSET相同。

3.AL32UTF8 字符集一个中文占用3个字节,ZHS16GBK 字符集一个中文占用2个字节。如果确认应用程序只用到英文和中文,ZHS16GBK会更加节省存储。如果不确定,建议使用AL32UTF8.

4.建表时指定列属性varchar(10),其中的10指的是字节,若是AL32UTF8 字符集,则只能存3个中文,若是ZHS16GBK字符集,则可以存5个中文。这会导致从ZHS16GBK字符集数据库通过数据泵导入到AL32UTF8字符集数据库过程中,有些列需要扩容。如果需要按字符指定列属性,应该为varchar2(10 char)。

5.AL32UTF8是ZHS16GBK的超集,因为AL32UTF8包含了更多国家的文字。

6.通过SecureCRT或xshell查看到中文乱码时,只需要查看数据库NLS_DATABSE_PARAMETERS中NLS_CHARACTERSET的字符集是什么,然后保持操作系统用户NLS_LANG的设置和SecureCRT或xshell软件的编码设置与之一致即可。
引用:

链接:http://blog.itpub.net/31441616/viewspace-2145085/,如需转载,请注明出处,否则将追究法律责任。

标签:NLS,ZHS16GBK,字符集,AL32UTF8,ORCALE,SQL,ALTER
来源: https://www.cnblogs.com/lkj371/p/15013289.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有