oracle中字符集 乱码问题与解决
法一:https://www.cnblogs.com/xingxiudong/p/3986874.html
法二:https://www.cnblogs.com/tiandaochouqinbokeyuan/p/8795512.html
GBK:中国国家标准字符集,是GB2312扩展
ZHS16GBK:是oracle数据库中支持GBK的字符集命名方式。
其格式为<语言><bit位><国家字符集>
法一:https://www.cnblogs.com/xingxiudong/p/3986874.html
SQL>
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
shutdown immediate
startup mount
alter system enable restricted session;
show parameter job_queue_processes;
alter system set job_queue_processes=0;
alter database open;
alter database character set ZHS16GBK;
alter database character set internal_use ZHS16GBK;
select * from nls_database_parameters where parameter='NLS_CHARACTERSET';
shutdown immediate
startup mount
alter system set job_queue_processes=1000;
alter database open;
shutdown immediate
startup
法二:https://www.cnblogs.com/tiandaochouqinbokeyuan/p/8795512.html
一、oracle server 端 字符集查询
select userenv('language') from dual
其中NLS_CHARACTERSET 为server端字符集
NLS_LANGUAGE 为 server端字符显示形式
二、查询oracle client端的字符集
$ echo $NLS_LANG
三、server端字符集修改
更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)
ALTER SYSTEM ENABLE RESTRICTED SESSION;
ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
ALTER SYSTEM SET AQ_TM_PROCESSES=0;
alter database open;
ALTER DATABASE CHARACTER SET ZHS16GBK;
ERROR at line 1:
ORA-12712: new character set must be a superset of old character set
提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:
ALTER DATABASE character set INTERNAL_USE ZHS16GBK;
select * from v$nls_parameters;
重启检查是否更改完成
select * from v$nls_parameters
四、修改环境变量
设置oracle用户的的环境
linux下修改环境变量(临时)
export NLS_LANG=SIMPLIFIED Chinese_CHINA.ZHS16GBK
变量名:NLS_LANG
变量值:SIMPLIFIED Chinese_CHINA.ZHS16GBK
Linux/Unix下的设置
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
问题:
一个为HP UNIX环境下,字符集为AMERICAN_AMERICA.US7ASCII,另一个为NT 环境下,字符集为SIMPLIFIED CHINESE_CHINA.ZHS16GBK,现在我将UNIX数据库里的表导进NT环境的数据库里,但用SQLPLUS浏览,表里所有的中文记录都是乱码,我曾将注册表NLS_LANG键值该过,该为AMERICAN_AMERICA.US7ASCII,但乱码仍然出现
可能解决方法:
只通过修改注册表是不能解决的,你可以借助EXECL文件,先修改注册表中的NLS_LANG=AMERICAN_AMERICA.US7ASCII,然后用PL/SQL DEVELOP 或PB将数据到出为EXECL文件,然后将注册表中的NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK,再将数据导入到另一套数据库中
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能