oracle数据库字符集、服务器字符集、客户端字符集



一:实际数据库是使用v$nls_parameters中的设置:
select * from v$nls_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';
等于:
select userenv('language') from dual;

数据库字符集nls_database_parameters其来源于props$,是表示数据库的字符集:
select * from nls_database_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';

字符集设置:
alter database character set INTERNAL_USE ZHS16GBK;
alter database character set ZHS16GBK;

二:数据库服务器字符集UNIX:
查看:
locale
echo $NLS_LANG
env | grep NLS_LANG
设置:
export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK     ---临时
#常用unicode字符集
export NLS_LANG=american_america.AL32UTF8
#常用中文字符集
export NLS_LANG=Simplified Chinese_china.ZHS16GBK
可以编辑 bash_profile 文件进行永久设置
vi .bash_profile
export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
#使 bash_profile 设置生效
source .bash_profile


三:客户端字符集环境nls_instance_parameters,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表会话字符集环境:
select * from nls_instance_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';

nls_session_parameters其来源于v$nls_parameters表示会话自己的设置,可能是会话的环境变量或者是alter session完成,

如果会话没有特殊的设置,将与nls_instance_parameters一致:
select * from nls_session_parameters t where t.PARAMETER ='NLS_LANGUAGE' or t.PARAMETER ='NLS_CHARACTERSET';

windows客户端:
在Windows上查看当前系统的代码页可以使用chcp命令:
E:\>chcp
活动的代码页: 936
代码页936也就是中文字符集 GBK,在Microsoft的官方站点上,我们可以遭到关于936代码页的具体编码规则,请参考以下链接:
http://www.microsoft.com/globaldev/reference/dbcs/936.htm
查看:
echo %NLS_LANG%
客户端NLS_LANG的设置方法:
#常用中文字符集
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
#常用unicode字符集
set NLS_LANG=american_america.AL32UTF8
可以通过修改注册表键值永久设置
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOMExx\NLS_LANG

或者 计算机---属性---高级设置---环境变量
添加:NLS_LANG          SIMPLIFIED CHINESE_CHINA.ZHS16GBK


查看数据库可以用字符集:
SELECT * FROM v$nls_valid_values t where t.PARAMETER ='LANGUAGE' or t.PARAMETER ='CHARACTERSET';

 
客户端的字符集要求与服务器一致,才能正确显示数据库的非ascii字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件字符集要求一致,
但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是american_america.zhs16gbk。


注意exp,imp导入导出字符集要一致。


四:简单乱码问题解决:

1.如果出现PLsqldevelop select出来的数据是乱码:
计算机---属性---高级设置---环境变量
添加:NLS_LANG          SIMPLIFIED CHINESE_CHINA.ZHS16GBK


2.如果excel打开csv 出现乱码:
用记事本打开CSV文件
文件-另存为,编码方式选择ANSI
保存完毕后,再用EXCEL打开这个文件就不会出现乱码的情况。
http://jingyan.baidu.com/article/ac6a9a5e4c681b2b653eacf1.html?qq-pf-to=pcqq.group


3.如果用CRT远程连接数据库服务器
在sql>select.....  as   中文    不可以执行sql
则修改CRT的字符集为:ANSI/OEM-简体中文或者GB2312

然后设置:export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK         就可以别名中文了


---end---





  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要查看Oracle数据库字符集,可以使用以下方法: 1. 通过查询NLS_DATABASE_PARAMETERS视图:在Oracle数据库中,可以使用以下SQL查询来查看数据库字符集: SELECT parameter, value FROM NLS_DATABASE_PARAMETERS WHERE parameter LIKE 'NLS_%CHARACTERSET'; 这将返回数据库字符集参数和对应的值。 2. 通过查看数据库导出文件的字符集信息:如果你有一个包含字符集信息的数据库导出文件(.dmp文件),你可以使用UltraEdit等文本编辑器打开该文件,并以16进制方式查看第2个和第3个字节的内容。这些字节记录了导出文件的字符集信息。然后,你可以使用对应的SQL查询来确定字符集。例如,如果第2个和第3个字节的内容是0354,你可以查询相应的字符集。 3. 通过查询NLS_LANG环境变量:在Unix/Linux操作系统中,可以使用以下命令查询NLS_LANG环境变量的值: echo $NLS_LANG 这将返回形如"AMERICAN_AMERICA.AL32UTF8"的值,其中.AL32UTF8表示数据库字符集。 如果发现数据库服务器端与客户端字符集不一致,应该统一修改为与服务器端相同的字符集,以确保数据的正确传输和处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [ORACLE 查看数据库字符集](https://blog.csdn.net/PeterJin/article/details/104605799)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [如何查看oracle数据库字符集](https://blog.csdn.net/liaoyuanzi/article/details/7702749)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值