说说ORACLE 字符集有啥大坑

2023年 9月 2日 60.1k 0

其实了解也不坑,纯纯的标题党,吸引你进来而已! 其实也不算是坑,有个周末帮朋友搭建个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必须决定字节序列对应的字符

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论