暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE 字符集的坑

441

其实了解也不坑,纯纯的标题党,吸引你进来而已! 其实也不算是坑,有个周末帮朋友搭建个RAC. 周一他测试,搞了一个上午都没有搞定乱码问题.

我设置ORACLE 数据端字符集为 ZHS16GBK 和AL16UTF16国家字符集.

这个应该不坑人啊! 他用PL/SQL DEV. 链接 建个表,然后给字段添加中文注解,然后再查看就乱码了.

他试过在WINDOW 环境变量定义NLS_LANG

NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

没毛病啊! 以前干了那么多次,老运维了! 

分别用PL/SQL DEV查看 客户端和数据端

      select userenv('language') from dual;

    USERENV('LANGUAGE')
    ------------------------------------------------------------------------------------------------------------------------------------------------------------
    SIMPLIFIED CHINESE_AMERICA.ZHS16GBK

    这三分别是 消息,币种,字符集

        select * from V$NLS_PARAMETERS
      ------------------------------------------------------------------------------------------------------------------------------------------------------------
      NLS_LANGUAGE SIMPLIFIED CHINESE
      NLS_TERRITORY AMERICA
      NLS_CURRENCY $
      NLS_ISO_CURRENCY AMERICA
      NLS_NUMERIC_CHARACTERS .,
      NLS_CALENDAR GREGORIAN
      NLS_DATE_FORMAT DD-MON-RR
      NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
      NLS_CHARACTERSET ZHS16GBK
      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_NCHAR_CHARACTERSET AL16UTF16
      NLS_COMP BINARY
      NLS_LENGTH_SEMANTICS BYTE
      NLS_NCHAR_CONV_EXCP FALSE


      没办法折腾上午了,人就要崩溃了,只好请这世界上最帅男人出马!

      我连上去一看,觉得奇怪, 咋是英文操作系统呢? WIN SERVER 2016

      我也试试 他的方法,普通方法,真的不行!
      最后去LINUX 下 ORACLE 账户下使用SQLPLUS 登陆,测试下.

      OK 很帅哦,帅帅的中文和帅帅的我!

      帅帅的我,周一很忙,他也是交差,只要证明搭建RAC没毛病,链接上去可以导入中文没有乱码. 有就是你个人问题,不要怪DBA!

      顺手把LINUX下ORACLE的环境变量 COPY 过来,安在WINDOWS 2016上

      SIMPLIFIED CHINESE_AMERICA.ALU32UTF8

      最后 它就喊我大爷! 

      作为 ORACLE 老帅哥,不能这样忽悠了事啊, 记得看过文章说是 数据库,系统,工具三者关系

      客户端工具 把中文编码字符传给 系统, 系统根据环境变量NLS_LANGE进行转码 上传给数据库.数据库收到系统给的转码 再结合本身字符集进行转码存储, 
      GBK 客户端 ->ZHS16GBK 系统 ->ZHS16GBK 数据库

      回显时 也是这样转!

      ZHS16GBK->ZHS16GBK->客户端GBK

      为什么 设置成ALU32UTF8 就OK 呢?

      GBK 客户端 ->ALU32UTF8 系统 ->ZHS16GBK 数据库

      最后这个狗屎的2016 英文版 只有英文和UINCODE 两种字符集.

      没有ZHS16GBK字符集!

      没有为什么PL/SQL 能显示中文呢? 很可能PL/SQL DEV 也是UNICODE字符集.

      应该说是 以UNICODE编码 显示的中文

      UNICODE 客户端 ->ALU32UTF8 系统 ->ZHS16GBK 数据库

      搞定 2016

      Windows Server 2016英文版安装Oracle10g的中文字符集设置方法

      1. 首先,设置系统的环境变量NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;设置系统控制面板的“区域”为“中国”;

      2. 我们知道,在Windows系统中,我们可以在“控制面板时钟,语言和区域”中为非Unicode程序设置区域设置语言。


      3. Windows有两种方法可以与之通信,称为“ANSI API”和“Unicode API”,“非unicode应用程序”是通过“ANSI API”而不是“Unicode”与Windows对话的应用程序。 

      4. API”。这意味着应用程序传递给Windows的任何字符串只是一个字节序列,而不是Unicode字符序列。 

      5. Windows必须决定字节序列对应的字符


      从第3点 说 中文非ANSI  就走UNCIODE API 通道.

      Oracle DBA 技能:


      OBA技能1-获取执行计划

      OBA技能2-执行计划顺序

      OBA技能3-执行计划顺序表连接

      ODBA技能4-实战执行计划

      ODBA技能5- 固定执行计划

      ODBA 技能6SPM计划

      ODBA技能 RAC死锁分析

      ODBA技能8 SQLTRAC&DUMP


      ORACLE RAC 系列

      RAC

      RAC安装

      使用UDEV绑定ASM盘符

      RAC crs_stat 命令结果完整显示

      RAC 修改私有网卡IP

      RAC私网修改错了咋办

      RAC 修改 IP

      ASM中的几个概念

      ASM 再平衡

      O RAC集群SCAN IP思路链

      RAC local_listener的坑

      RAC的坑应用分离


      ORACLE优化新常态书


      <Oracle优化新常态>第一章

      <Oracle优化新常态>第二章强拆(1)

      <Oracle优化新常态>第二章强拆(2)

      <Oracle优化新常态>第三章 三大配置

      <Oracle优化新常态>第四章 分库分表

      <Oracle优化新常态> 第六章 SQL优化大法

      <Oracle优化新常态> 第六点五章 急诊法

      <Oracle优化新常态> 第七章 五大禁止

      <Oracle优化新常态> 第八章 WHO-IT方法简介

      <Oracle优化新常态> 第九章 索引优化

      <Oracle优化新常态> 第十章 WHO-IT的命中率

      <Oracle优化新常态> 第十一章 WHO-IT的等待事件



      文章转载自海鲨数据库架构师,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

      评论