在部署重构版测试环境时,须要建立Oracle数据库,使用dbca建立数据库以后没有注意数据库自己的字符集,致使后续全部的数据库脚本执行后中文乱码。最后的解决办法是清掉全库数据,再修改字符集,重启数据库。linux
系统或者程序运行的环境就是一个咱们常见的locale。而设置数据库locale最简单的方法就是设置NLS_LANG这个环境参数。在linux中NLS_LANG是一个环境变量,在windows中NLS_LANG是写在注册表中的。NLS_LANG这个参数由三个组成部分,分别是语言(language), 区域(territory)和字符集(character set),格式以下:程序员
NLS_LANG = language_territory.charset
咱们平时最多见的就是:AMERICAN_AMERICA.ZHS16GBK
和SIMPLIFIED CHINESE_CHINA.ZHS16GBK
sql
NLS_LANG的做用官网是这样说的:shell
意思就是说:数据库
检查Oracle Server字符集最经常使用的方法有两种windows
select * from nls_database_parameters;
userenv函数返回当前会话(session)的相关信息。如下sql语句能够查询当前会话链接的数据库字符集服务器
select userenv('language') from dual;
有关userenv('parameter')
返回值的官网介绍以下session
意思就是:返回的是当前会话使用的language和territory。characterset是数据库的字符集。oracle
userenv函数的具体使用和当前会话字符集的取值详见如下连接app
一旦数据库建立后,数据库的字符集理论上讲是不能改变的。所以,在设计和安装之初考虑使用哪种字符集十分重要。根据Oracle的官方说明,字符集的转换是从子集到超集受支持,反之不行。若是两种字符集之间根本没有子集和超集的关系,那么字符集的转换是不受oracle支持的。对数据库server而言,错误的修改字符集将会致使不少不可测的后果,可能会严重影响数据库的正常运行,因此在修改以前必定要确认两种字符集是否存在子集和超集的关系。通常来讲,除非万不得已,咱们不建议修改oracle数据库server端的字符集。
如下是修改server端字符集的方法——不建议使用
SQL> conn /as sysdba SQL> 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 ZHS16GBK; ALTER DATABASE CHARACTER SET ZHS16GBK * ERROR at line 1: ORA-12712: new character set must be a superset of old character set 提示咱们的字符集:新字符集必须为旧字符集的超集,这时咱们能够跳过超集的检查作更改: SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; SQL> select * from v$nls_parameters; 重启检查是否更改完成: SQL> shutdown immediate; SQL> startup SQL> select * from v$nls_parameters;
具体使用方法参见:oracle服务器和客户端字符集的查看和修改
windows查看nls_lang
set NLS_LANG
linux查看nls_lang
echo $NLS_LANG
修改客户端字符集只须要修改上述检查结果中的NLS_LANG便可。
▶数据库字符集
select * from nls_database_parameters ; select userenv('language') from dual;
▶实例字符集
select * from nls_instance_parameters;
▶会话字符集
select * from nls_session_parameters;
详见oracle官网:NLS Database Parameters
记得帮我点赞哦!
精心整理了计算机各个方向的从入门、进阶、实战的视频课程和电子书,按照目录合理分类,总能找到你须要的学习资料,还在等什么?快去关注下载吧!!!
念念不忘,必有回响,小伙伴们帮我点个赞吧,很是感谢。
我是职场亮哥,YY高级软件工程师、四年工做经验,拒绝咸鱼争当龙头的斜杠程序员。
听我说,进步多,程序人生一把梭
若是有幸能帮到你,请帮我点个【赞】,给个关注,若是能顺带评论给个鼓励,将不胜感激。
职场亮哥文章列表:更多文章
本人全部文章、回答都与版权保护平台有合做,著做权归职场亮哥全部,未经受权,转载必究!