其实了解也不坑,纯纯的标题党,吸引你进来而已! 其实也不算是坑,有个周末帮朋友搭建个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必须决定字节序列对应的字符
最后修改:2023 年 09 月 10 日
如果觉得我的文章对你有用,请随意赞赏