zoukankan      html  css  js  c++  java
  • PL/SQL无法查询过滤中文字段解决方案

    原因: 
    PLSQL乱码问题皆是ORACLE服务端字符集编码与PLSQL端字符集编码不一致引起。类似乱码问题都可以从编码是否一致上面去考虑。 
    解决:
     
    1. 查询Oracle服务端字符集编码,获取NLS_CHARACTERSET字段值:
    执行
     select from v$nls_parameters
             
     
     
    保存查询到的值,如:NLS_CHARACTERSET = AL32UTF8
     
    2. 查询Oracle服务端语言信息:
    执行
    NLS_CHARACTERSET 
    SELECT 'AMERICAN_AMERICA.' || PROPERTY_VALUE 
    FROM DATABASE_PROPERTIES
     
    保存查询到的值,如:AMERICAN_AMERICA.AL32UTF8
     
    3. 设置本地环境变量。(PLSQL优先从环境变量中获取属性)
       右击 我的电脑 -> 属性 -> 告警系统属性 -> 高级 -> 环境变量 -> 系统变量栏
       新增如下两条记录:
    NLS_CHARACTERSET = AL32UTF8
    NLS_LANG = AMERICAN_AMERICA.AL32UTF8
     
    4. 重启PLSQL,OK。 

    原因:

    客户端与服务器端编码不一致

    了解下NLS_LANG的知识

    NLS_LANG 参数组成
    NLS_LANG=<Language>_<Territory>.<Clients Characterset> 

    查看Oracle服务端编码:select * from sys.nls_database_parameters;

    查看client编码:select * from sys.nls_session_parameters;

    从下面服务端 编码我们可以得到: NLS_LANG = AMERICAN_AMERICA.AL32UTF8

    查看oracle服务端编码:select * from sys.nls_database_parameters;

    NLS_LANGUAGE  AMERICAN
    NLS_TERRITORY  AMERICA
    NLS_CURRENCY  $
    NLS_ISO_CURRENCY  AMERICA
    NLS_NUMERIC_CHARACTERS  .,
    NLS_CHARACTERSET  AL32UTF8
    NLS_CALENDAR  GREGORIAN
    NLS_DATE_FORMAT  DD-MON-RR
    NLS_DATE_LANGUAGE  AMERICAN
    NLS_SORT  BINARY
    NLS_TIME_FORMAT  HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT  DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT  HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT  DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY  $
    NLS_COMP  BINARY
    NLS_LENGTH_SEMANTICS  BYTE
    NLS_NCHAR_CONV_EXCP  FALSE
    NLS_NCHAR_CHARACTERSET AL16UTF16
    NLS_RDBMS_VERSION 11.2.0.1.0


    查看client编码   :select * from sys.nls_session_parameters;
    NLS_LANGUAGE SIMPLIFIED CHINESE
    NLS_TERRITORY CHINA
    NLS_CURRENCY ¥
    NLS_ISO_CURRENCY CHINA
    NLS_NUMERIC_CHARACTERS .,
    NLS_CALENDAR GREGORIAN
    NLS_DATE_FORMAT DD-MON-RR
    NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
    NLS_SORT BINARY
    NLS_TIME_FORMAT HH.MI.SSXFF AM
    NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
    NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
    NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR
    NLS_DUAL_CURRENCY ¥
    NLS_COMP BINARY
    NLS_LENGTH_SEMANTICS BYTE
    NLS_NCHAR_CONV_EXCP FALSE

    明显客户端的编码和服务器端 的不一致!!!!解决办法:

    设置环境变量 重启PLSQL

    NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    此方法也适合用exp imp !以免中文有乱码出现!或部分数据乱码!

    WINNT>   set NLS_LANG=AMERICAN_AMERICA.AL32UTF8
    Linux>    export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

    查看 NLS_LANG 的方法
    Windows使用:echo %NLS_LANG%

    C:UsersAdministrator>echo %NLS_LANG%
    AMERICAN_AMERICA.AL32UTF8

    修改db编码的办法:(在oracle 11g上通过测试) --风险操作....最好不要用!!!!!!!!
    SQL> conn system as sysdba;
    SQL> shutdown immediate;
    SQL> startup mount;
    SQL> alter system enable restricted session;
    SQL> alter system set job_queue_processes=0;
    SQL> alter database open;
    SQL> alter database character set internal_use AL32UTF8;
    SQL> shutdown immediate;
    SQL> startup 

    感谢原创分享,原文地址:https://www.cnblogs.com/zhaobing0121/p/6909696.html

  • 相关阅读:
    LeetCode之“树”:Binary Tree Preorder && Inorder && Postorder Traversal
    LeetCode之“树”:Binary Tree Level Order Traversal && Binary Tree Level Order Traversal II
    LeetCode之“树”:Balanced Binary Tree
    LeetCode之“树”:Sum Root to Leaf Numbers
    LeetCode之“树”:Validate Binary Search Tree
    LeetCode之“树”:Path Sum && Path Sum II
    LeetCode之“树”:Symmetric Tree && Same Tree
    TCP中的MSS解读(转)
    IP协议详解(转)
    TCP 的那些事儿(上)(转)
  • 原文地址:https://www.cnblogs.com/qxfan/p/8970648.html
Copyright © 2011-2022 走看看