SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
-----------------------------------------------------------
SIMPLIFIED CHINESE_CHINA.WE8ISO8859P1
从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。
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、修改数据库的字从字符集
SQL> ALTER DATABASE NATIONAL CHARACTER SET JAPANSE_JAPAN JA16SJIS;
ALTER DATABASE NATIONAL CHARACTER SET JAPANSE_JAPAN JA16SJIS
*
第 1 行出现错误:
ORA-00933: SQL command not properly ended
ALTER DATABASE NATIONAL CHARACTER SET 'JAPANSE_JAPAN JA16SJIS';
SQL> ALTER DATABASE NATIONAL CHARACTER SET 'JAPANSE_JAPAN JA16SJIS';
ALTER DATABASE NATIONAL CHARACTER SET 'JAPANSE_JAPAN JA16SJIS'
*
第 1 行出现错误:
ORA-24329: invalid character set identifier
SQL> select * from V$NLS_VALID_VALUES where parameter ='CHARACTERSET';
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
CHARACTERSET AR8MUSSAD768
CHARACTERSET AR8ADOS710
CHARACTERSET AR8ADOS720
CHARACTERSET AR8APTEC715
CHARACTERSET AR8MSWIN1256
CHARACTERSET AR8MSAWIN
CHARACTERSET AR8NAFITHA721
CHARACTERSET AR8SAKHR706
CHARACTERSET AR8ARABICMAC
CHARACTERSET AR8ARABICMACS
CHARACTERSET AR8ARABICMACT
CHARACTERSET LA8ISO6937
CHARACTERSET WE8DECTST
CHARACTERSET JA16VMS
CHARACTERSET JA16EUC
CHARACTERSET JA16EUCYEN
CHARACTERSET JA16SJIS
CHARACTERSET JA16DBCS
CHARACTERSET JA16SJISYEN
CHARACTERSET JA16EBCDIC930
CHARACTERSET JA16MACSJIS
ALTER DATABASE NATIONAL CHARACTER SET 'JA16SJIS';
SQL文修改编码方法:
shutdown immediate;
startup mount;
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 internal_use GB2312;
shutdown immediate;
startup;
我没有测试成功,唉!重安装库吧……
oracle查看字符集 修改字符集
本机暂存
同分类推荐文章
- 使用deepseek进行Oracle恢复,引起重大故障 (2026-06-22 10:56:00)
- 接手一个只差临门一脚的数据库恢复 (2026-06-18 00:13:09)
- 我做了一个 AI 版的 StarRocks 升级风险扫描工具,直接帮我定位到一个风险 (2026-06-15 01:00:00)
建议继续学习
- MySQL数据库在实际应用一些方面的介绍 (累计阅读 36,397)
- 如何查找消耗资源较大的SQL (累计阅读 15,209)
- Oracle MTS模式下 进程地址与会话信息 (累计阅读 14,406)
- 其实,文件也可以truncate (累计阅读 8,571)
- MariaDB常见问题FAQ (累计阅读 8,341)
- SQL vs NoSQL:数据库并发写入性能比拼 (累计阅读 7,999)
- Mysql的随机读取 (累计阅读 7,861)
- 索引与优化like查询 (累计阅读 7,336)
- 在百度的第一年 (累计阅读 6,919)
- 那些在11gR2中可能惹祸的新特性,一张列表帮助你摆脱升级11gR2带来的烦恼 (累计阅读 6,878)