zoukankan      html  css  js  c++  java
  • oracle服务端字符集

    一、oracle服务端字符集
    SQL> select userenv('language') from dual ;

    USERENV('LANGUAGE')
    ----------------------------------------------------
    AMERICAN_AMERICA.AL32UTF8

    二、oracle客户段字符集

    2.1 window环境下,修改注册表ORACLE_HOME目录下的环境变量NLS_LANG。

    2.2 unix/linux环境下,就是环境变量$NLS_LANG

    [python@master ~]$ echo $NLS_LANG

    [python@master ~]$ locale
    LANG=zh_CN.UTF-8
    LC_CTYPE="zh_CN.UTF-8"
    LC_NUMERIC="zh_CN.UTF-8"
    LC_TIME="zh_CN.UTF-8"
    LC_COLLATE="zh_CN.UTF-8"
    LC_MONETARY="zh_CN.UTF-8"
    LC_MESSAGES="zh_CN.UTF-8"
    LC_PAPER="zh_CN.UTF-8"
    LC_NAME="zh_CN.UTF-8"
    LC_ADDRESS="zh_CN.UTF-8"
    LC_TELEPHONE="zh_CN.UTF-8"
    LC_MEASUREMENT="zh_CN.UTF-8"
    LC_IDENTIFICATION="zh_CN.UTF-8"
    LC_ALL=
    NLS_LANG=语言_地域_客户端字符集  


    (1).数据库服务器字符集
    select * from nls_database_parameters
    来源于props$,是表示数据库的字符集。

    (2).客户端字符集环境
    select * from nls_instance_parameters
    其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

    (3).会话字符集环境
    select * from nls_session_parameters
    来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

    5.1 修改server端字符集(不建议使用)

    1.关闭数据库
    SQL>SHUTDOWN IMMEDIATE


    2. 启动到Mount
    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;
    SQL>ALTER DATABASE NATIONAL CHARACTER SET ZHS16GBK;

    --如果是从子集到父集,需要使用INTERNAL_USE 参数,跳过超子集检测

    SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE AL32UTF8;
    SQL>ALTER DATABASE NATIONAL CHARACTER SET INTERNAL_USE AL32UTF8;
    SQL>SHUTDOWN IMMEDIATE;
    SQL>STARTUP

    注意:如果没有大对象,在使用过程中进行语言转换没有什么影响,(切记设定的字符集必须是ORACLE支持,不然不能start) 按上面的做法就可以。


    若出现‘ORA-12717: Cannot ALTER DATABASE NATIONAL CHARACTER SET when NCLOB data exists’ 这样的提示信息,
    要解决这个问题有两种方法
    1. 利用INTERNAL_USE 关键字修改区域设置,
    2. 利用re-create,但是re-create有点复杂,所以请用internal_use

    SQL>SHUTDOWN IMMEDIATE;
    SQL>STARTUP MOUNT EXCLUSIVE;
    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 NATIONAL CHARACTER SET INTERNAL_USE UTF8;
    SQL>SHUTDOWN immediate;
    SQL>startup;
    如果按上面的做法做,National charset的区域设置就没有问题

     
    5.2 修改dmp文件字符集
    上文说过,dmp文件的第2第3字节记录了字符集信息,因此直接修改dmp文件的第2第3字节的内容就可以‘骗’过oracle的检查。这样做理论上也仅是从子集到超集可以修改,但很多情况下在没有子集和超集关系的情况下也可以修改,我们常用的一些字符集,如US7ASCII,WE8ISO8859P1,ZHS16CGB231280,ZHS16GBK基本都可以改。因为改的只是dmp文件,所以影响不大。
    具体的修改方法比较多,最简单的就是直接用UltraEdit修改dmp文件的第2和第3个字节。

    比如想将dmp文件的字符集改为ZHS16GBK,可以用以下SQL查出该种字符集对应的16进制代码:
    SQL> select to_char(nls_charset_id('ZHS16GBK'), 'xxxx') from dual;
    0354
    然后将dmp文件的2、3字节修改为0354即可。
    如果dmp文件很大,用ue无法打开,就需要用程序的方法了。
    5.3客户端字符集设置方法
         1)UNIX环境
             $NLS_LANG=“simplified chinese”_china.zhs16gbk
             $export NLS_LANG
             编辑oracle用户的profile文件
        2)Windows环境
             编辑注册表
             Regedit.exe ---》 HKEY_LOCAL_MACHINE ---》SOFTWARE ---》 ORACLE-HOME

     或者在窗口设置:

            set nls_lang=AMERICAN_AMERICA.ZHS16GBK

  • 相关阅读:
    mac 终端命令
    安装和使用Carthage
    Mac下的常用终端命令与vim常用命令
    swift 获取推送deviceToken
    使mac版的MYSQL支持emoji表情
    iOS --- 通过CPU实现的简单滤镜效果
    IOS多选单选相册图片
    AVCaptureDevice iOS摄像头属性
    GPUImage 滤镜介绍
    苹果IOS开发者账号如何续费-Appstore
  • 原文地址:https://www.cnblogs.com/hello-wei/p/9924002.html
Copyright © 2011-2022 走看看