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.  
  3. 涉及三方面的字符集,
    1. oracel server端的字符集;
    2. oracle client端的字符集;
    3. dmp文件的字符集。
  4.  
  5. 在做数据导入的时候,需要这三个字符集都一致才能正确导入。
  6.  
  7. 2.1 查询oracle server端的字符集
    有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
    SQL> select userenv('language') from dual;
    USERENV('LANGUAGE')
    ----------------------------------------------------
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK
  8.  
  9. SQL>select userenv(‘language’) from dual;
    AMERICAN _ AMERICA. ZHS16GBK
  10.  
  11. 2.2 如何查询dmp文件的字符集
    oracleexp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第23个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
    SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
    ZHS16GBK
  12.  
  13. 如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
    cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
    然后用上述SQL也可以得到它对应的字符集。
  14.  
  15. 2.3 查询oracle client端的字符集
    windows平台下,就是注册表里面相应OracleHomeNLS_LANG。还可以在dos窗口里面自己设置,
    比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
    这样就只影响这个窗口里面的环境变量。
  16.  
  17. unix平台下,就是环境变量NLS_LANG
    $echo $NLS_LANG
    AMERICAN_AMERICA.ZHS16GBK
  18.  
  19. 如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
  20.  
  21. 补充:
    (1).数据库服务器字符集
    select * from nls_database_parameters
    来源于props$,是表示数据库的字符集。
  22.  
  23. (2).客户端字符集环境
    select * from nls_instance_parameters
    其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
  24.  
  25. (3).会话字符集环境
    select * from nls_session_parameters
    来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。
  26.  
  27. (4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
    如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表> 参数文件> 数据库默认参数
  28.  
  29. 字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk
  30.  
  31. 出现中文乱码的主要原因是字符集不同。在Oracle中,我们关心三个地方的字符集: 
  32.  
  33. 先来查看一下数据库字符集: 
    Oracle中可能使用Select userenv('language') from dual;或者:Select name, value$ from props$;查看。 
  34.  
  35. l Oracle服务器内部的字符集 
    修改方法: 
    connect sys/chang_on_install 
    update props$ set value$='TRADITIONAL CHINESE_TAIWAN.AL32UTF8'where name='NLS_CHARACTERSET'; 
    commit; 
  36.  
  37. 2 NLS_LANG变量里保存的字符集 
  38.  
  39. 这个是Oracle设置的一个变量。在Windows中,这个变量保存在注册表中: 
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 保存着NLS_LANG变量。 
  40.  
  41. Unix/Linux中,则需要自己进行设置,在.profile里面加上 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 
    export NLS_LANG 
  42.  
  43. 3 客户端应用的字符集 
  44.  
  45. 下面是我用到的字符集 
    american_america.AL32UTF8 
    TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950 
    TRADITIONAL CHINESE_TAIWAN.AL32UTF8 
    AMERICAN_AMERICA.WE8ISO8859P1 
    AMERICAN_AMERICA.ZHS16GBK 
  46.  
  47. 特别注意:如果服务端编码为AL32UTF8,那么客户端就应该安装自己环境来设置字符编码。 
    比如我有一个服务器端,其中两个客户端一个为简体,一个为繁体: 
    服务器端字符集设置:american_america.AL32UTF8 
    简体客户端字符集设置:AMERICAN_AMERICA.ZHS16GBK 
    繁体客户端字符集设置:TRADITIONAL CHINESE_TAIWAN.ZHT16MSWIN950 

查看和设置Oracle数据库字符集的更多相关文章

  1. 查看和设置MySQL数据库字符集(转)

    查看和设置MySQL数据库字符集作者:scorpio 2008-01-21 10:05:17 标签: 杂谈 Liunx下修改MySQL字符集:1.查找MySQL的cnf文件的位置find / -ina ...

  2. 如何设置Oracle数据库客户端字符集以及系统中的NLS_LANG环境变量

    概述: 本地化是系统或软件运行的语言和文化环境.设置NLS_LANG环境参数是规定Oracle数据库软件本地化行为最简单的方式. NLS_LANG参数不但指定了客户端应用程序和Oracle数据库所使用 ...

  3. Oracle数据库字符集问题解析

    Oracle数据库字符集问题解析 经常看到一些朋友问ORACLE字符集方面的问题,我想以迭代的方式来介绍一下.第一次迭代:掌握字符集方面的基本概念.有些朋友可能会认为这是多此一举,但实际上正是由于对相 ...

  4. ORACLE数据库字符集处理

    简介: ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化支持,OR ...

  5. oracle数据库字符集的修改

    本文摘自:http://blog.csdn.net/nsj820/article/details/65711051.改客户端字符集:通过WINDOWS的运行菜单运行Regedit,修改注册表 Star ...

  6. 选择ORACLE数据库字符集

    如何选择数据库的字符集是一个有争议的话题,字符集本身涉及的范围很广,它与应用程序.客户的本地环境.操作系统.服务器等关系很密切,因此要做出合适的 选择,需要明白这些因素之间的关系.另外对字符集的基本概 ...

  7. linux下oracle数据库字符集修改

    linux下oracle数据库字符集修改 0.RHEL6.7.oracle11gr2 1.登录oracle.在安装oracle的用户下进入数据库. $ sqlplus / as sysdba 2.查询 ...

  8. Oracle数据库字符集问题

    Oracle数据库的字符集问题,也涉及作为服务器操作系统的CentOS或者Windows的字符集与Oracle字符集之间的关联关系Oracle的字符集,这个问题的提出是因为两个原因:一是遇到一个DMP ...

  9. 查看和修改Oracle数据库服务器端的字符集

    Oracle数据库查看和修改服务器端的字符集的方法是本文主要要介绍的内容,接下来救让我们一起来了解一下这部分内容. A.oracle server 端字符集查询 select userenv('lan ...

随机推荐

  1. 12、OpenCV Python 图像梯度

    __author__ = "WSX" import cv2 as cv import numpy as np def lapalian_demo(image): #拉普拉斯算子 # ...

  2. Linux磁盘占满 no space left on device

    假如当前文件删除了,如果还有其他进程还在使用这个文件,这个文件删不干净:https://www.cnblogs.com/heyonggang/p/3644736.html 在Linux下查看磁盘空间使 ...

  3. 原生JS实现返回顶部和滚动锚点

    ;(function (window,doc,undefined) { function rollingAnchor(){ this.timer =''; } rollingAnchor.protot ...

  4. kotlin spring mvc request json 请求

    // json 代码{ /*用户信息*/ user: { username: '{$user.username}', headImg: '{$user.headImg}', targetId: '{$ ...

  5. composer 创建自己包

    服务器环境下创建自己的项目文件 初始化composer 打开cmd 窗口,cd 到 backrestore 执行 composer init 命令 D:\phpStudy\WWW\backrestor ...

  6. docker 镜像的配置文件修改

    #抛砖引玉# docker exec -ti 容器ID /bin/bash

  7. 【算法笔记】B1022 D进制的A+B

    1022 D进制的A+B (20 分) 输入两个非负 10 进制整数 A 和 B (≤2​30​​−1),输出 A+B 的 D (1<D≤10)进制数. 输入格式: 输入在一行中依次给出 3 个 ...

  8. Django Cannot assign "A1": "B1" must be a "C1" instance. 错误信息

    常见报错 Cannot assign “A1”: “B1” must be a “C1” instance. 告诉我们 必须使用 C1 模型类的 实例,而不是具体的参数值. 这个错误信息,是我写入数据 ...

  9. C# 判别系统版本以及Win10的识别办法

    首先得知道操作系统和主次版本的对应关系 我们可以用Environment.OSVersion来判断当前操作系统 && Environment.OSVersion.Version.Min ...

  10. WebApi接入Swagger

    1.新建webApi项目 2.nuget引入 swagger 3.在项目属性里配置输出 xml文件 4.打开SwaggerConfig.cs编辑 protected static string Get ...