其实了解也不坑,纯纯的标题党,吸引你进来而已! 其实也不算是坑,有个周末帮朋友搭建个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的中文字符集设置方法
首先,设置系统的环境变量NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK;设置系统控制面板的“区域”为“中国”;
我们知道,在Windows系统中,我们可以在“控制面板时钟,语言和区域”中为非Unicode程序设置区域设置语言。
Windows有两种方法可以与之通信,称为“ANSI API”和“Unicode API”,“非unicode应用程序”是通过“ANSI API”而不是“Unicode”与Windows对话的应用程序。
API”。这意味着应用程序传递给Windows的任何字符串只是一个字节序列,而不是Unicode字符序列。
Windows必须决定字节序列对应的字符