前几天新建vmware,安装好oracle10g数据库,导入项目中SQL脚本,中文全部显示乱码。
现整理网上寻找的答案供大家参考:
1、查询数据库当前字符集
SQL> select * from nls_database_parameters where parameter=‘NLS_CHARACTERSET‘; PARAMETER VALUE ---------------------------------------- ---------------------------------------- NLS_CHARACTERSET WE8ISO8859P1如果大家的字符集和我的一样,则说明可以按照我下面的步骤进行校正。
该问题主要是在按照oracle时没有选择字符集采用的是Linux操作系统默认字符集:WE8ISO8859P1
解决办法:
1、关闭数据库
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down2、mount启动数据库
SQL> startup mount ORACLE instance started. Total System Global Area 205520896 bytes Fixed Size 1266608 bytes Variable Size 100666448 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes Database mounted.3、限制session
SQL> alter system enable restricted session; System altered.4、查看并修改相关参数
SQL> show parameter job_queue_processes; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ job_queue_processes integer 10 SQL> show parameter aq_tm_processes; NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ aq_tm_processes integer 0 SQL> alter system set job_queue_processes=0; System altered.5、打开数据库
SQL> alter database open; Database altered.6、修改字符集
SQL> alter database character set ZHS16GBK; alter database character set ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 出现错误提示,新字符集必须是老字符集的超集,也就原来字符集是新字符集的子集,可以再Oracle官方文档上查询字符集包含关系。下面使用Oracle内部命令internal_use,跳过超集检查,生产环境不建议使用此方法。 SQL> alter database character set internal_use ZHS16GBK; Database altered.7、再次查看当前字符集
SQL> select * from nls_database_parameters where parameter=‘NLS_CHARACTERSET‘; PARAMETER VALUE ---------------------------------------- ---------------------------------------- NLS_CHARACTERSET ZHS16GBK8、关闭数据库
SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down.9、mount启动数据库
SQL> startup mount ORACLE instance started. Total System Global Area 205520896 bytes Fixed Size 1266608 bytes Variable Size 100666448 bytes Database Buffers 100663296 bytes Redo Buffers 2924544 bytes Database mounted.10、将上面第4步骤修改的相关参数还原
SQL> alter system set job_queue_processes=10; System altered.11、打开数据库
SQL> alter database open; Database altered.至此该问题就已经解决了。如果你用PLSQL查看的时候还是乱码那你在本地在设置一个环境变量:
NLS_LANG 值为SIMPLIFIED CHINESE_CHINA.ZHS16GBK
设置完成后基本就OK了。