最近使用oci操作oracle数据库,发现用户的数据库中文数据全是乱码,而我自己的库全部正常。
查看了编码
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET';
显示为
WE8MSWIN1252
怪不得啊,这里是英文字符集啊。
因为有数据,不能重建数据库,只能修改编码了。
1.首先以sysdba的身份登录上去 conn /as sysdba
2.关闭数据库shutdown immediate;
3.以mount打来数据库,startup mount
4.设置session
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;
5.启动数据库
alter database open;
6.修改字符集
ALTER DATABASE character set INTERNAL_USE utf8;
INTERNAL_USE 提供的帮助就会使oracle绕过了子集与超集的验证,这条语句和上面的语句内部操作时完全相同的。
7.关闭,重新启动
SQL>shutdown immediate;
SQL> startup
阅读(7113) | 评论(0) | 转发(0) |