http://www.linuxidc.com/Linux/2011-11/47383p2.htm

什么是Oracle字符集
Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。
它使数据库工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。

解决Oracle的客户端乱码问题的关键关键是要把服务器端使用的字符集跟客户端使用的字符集统一起来。而Oracle客户端(Sqlplus)就是通过NLS_LANG环境变量来确定客户端使用的字符集。
==============================
字符集一共有三种:
a.操作系统字符集
b.Oracle数据库字符集
c.软件(各种客户端软件)字符集

如果软件有字符集,就不会使用操作系统的字符集;如果没有字符集(比如SQL/PLUS就没有字符集),那么在输入和显示中文时就调用操作系统的字符集来进行编码。SQL/PLUS在输入中文以后,会调用操作系统的字符集将中文转化成编码,然后传递给Oracle数据库,Oracle数据库通过查看nls_language来获取操作系统使用的字符集,如果俩字符集是一致的,那么就会直接将编码存入Oracle数据库;如果不一致,Oracle数据库首先会用nls_lang所表明的字符集将编码转化成字符,然后用Oracle数据库自己的字符集将字符转化成编码存入数据库。总之,所有字符集的转化都是在Oracle端进行的,Oracle数据库在存储数据的时候一定是按照自己的字符集来存储的。
最重要的就是这个环境变量
NLS_LANG = language_territory.charset
NLS_LANG各部分含义如下:
LANGUAGE指定:
-Oracle消息使用的语言
-日期中月份和日显示
TERRITORY指定
-货币和数字格式
-地区和计算星期及日期的习惯
CHARACTERSET:
-控制客户端应用程序使用的字符集
通常设置或者等于客户端(如Windows)代码页
或者对于unicode应用设置为UTF8

从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。
所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。

操作系统常用的字符集一共两种,一种是UTF8,还有一种就是中文。windows通过chcp命令来查询操作系统所使用的字符集,如果现实"活动代码页:936",就表示操作系统使用的字符集是中文,这时只要将nls_lang通过Set nls_lang=american_america.zhs16gbk命令设置成GBK即可,总之,NLS_LANG一定要设置成与操作系统字符集一致才不会出现中文乱码或者显示?的问题。

where language specifies the conventions to use for Oracle Database messages, sorting order, day and month names.
If language is not set, it defaults to AMERICAN.

where territory specifies the convention for default dates, and for monetary, and numeric formats.
If territory is not set, the default value is derived from the language value, and so is set to AMERICA.

where, in SQL*Plus command-line, charset specifies the character set encoding used by SQL*Plus for data processing, and is generally suited to that of the users terminal.

===================================
服务器字符集select * from nls_database_parameters,其来源于props$,是表示数据库的字符集。
客户端字符集select * from nls_instance_parameters,其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表
会话字符集     select * from nls_session_parameters,其来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表 > 参数文件 > 数据库默认参数
字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

=================================
查询字符集
select userenv('language') from dual;
set nls_lang=SIMPLIFIED CHINESE_CHINA.ZHS16GBK

select * from nls_database_parameters;
SELECT * FROM v$nls_parameters;

--NLS_LANGUAGE
--NLS_TERRITORY
--NLS_CHARACTERSET

SELECT * FROM v$nls_valid_values;

select * from v$nls_valid_values
where parameter='LANGUAGE'
order by value;
--SIMPLIFIED CHINESE

select * from v$nls_valid_values
where parameter='TERRITORY'
order by value;
--CHINA

select * from v$nls_valid_values
where parameter='CHARACTERSET'
order by value;
--ZHS16GBK

下面这个设置的值就是上面查询到的有的
set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
AMERICAN_AMERICA. ZHS16GBK

==================================
正确导入与导出

1. oracel server端的字符集;
2. oracle client端的字符集;
3. dmp文件的字符集。
在做数据导入的时候,需要这三个字符集都一致才能正确导入。

2.1 查询oracle server端的字符集
有很多种方法可以查出oracle server端的字符集,比较直观的查询方法是以下这种:
SQL> select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

2.2 如何查询dmp文件的字符集
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。
如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
SQL> select nls_charset_name(to_number('0354','xxxx')) from dual;
ZHS16GBK
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6
然后用上述SQL也可以得到它对应的字符集。

2.3 查询oracle client端的字符集
在windows平台下,就是注册表里面相应OracleHome的NLS_LANG。还可以在dos窗口里面自己设置,
比如: set nls_lang=AMERICAN_AMERICA.ZHS16GBK
这样就只影响这个窗口里面的环境变量。
在unix平台下,就是环境变量NLS_LANG。
$echo $NLS_LANG
AMERICAN_AMERICA.ZHS16GBK

如果检查的结果发现server端与client端字符集不一致,请统一修改为同server端相同的字符集。
=====================================
更改oracle服务器字符集

>shutdown immediate;
>startup mount;
>alter system enable restricted session;
>alter system set job_queue_processes=0;
>alter system set aq_tm_processes=0;
>alter database open;
>alter database character set utf8;
OR
>alter database character set internal_use utf8;
>shutdown immediate;
>startup; (重开正常oracle)

-------------------------------------------------------------------------------------------

CLI客户端

最精简的sqlplus客户端安装

在安装数据库的机器上复制出6个文件(一个执行文件,5个库文件)到想要充当客户端的机器中的一个目录中,
先在源查出相关文件所在的位置,再进行复制与打包,并传送到目的地,在目的地解压,并进行相关配置
locate libsqlplusic.so
cd /usr/lib/oracle/10.2.0.3/client/lib
cp libclntsh.so.10.1 libnnz10.so libociei.so libsqlplus.so libsqlplusic.so ../bin/sqlplus ~/sq
tar cf sq.tar sq
scp sq.tar root@172.16.1.44:/root/

在目的地解压,并进行相关配置
tar xf sq.tar
11:59:38 22 ~/sq:#ll
total 96980
-rw-r--r--. 1 500 500 18825267 Jun 19 10:48 libclntsh.so.10.1
-rw-r--r--. 1 500 500  5486009 Jun 19 10:48 libnnz10.so
-rw-r--r--. 1 500 500 72480394 Jun 19 10:48 libociei.so
-rw-r--r--. 1 500 500  1434235 Jun 19 10:49 libsqlplusic.so
-rw-r--r--. 1 500 500  1057777 Jun 19 10:46 libsqlplus.so
-rwxr-xr-x. 1 500 500     4284 Jun 19 10:47 sqlplus

linux动态库加载路径修改
1.在 /etc/ld.so.conf 文件中添加搜索路径,重启或者 ldconfig 生效;
2.在 /etc/ld.so.conf.d 目录下添加 *.conf 文件,其中可以添加搜索路径,重启获取运行 ldconfig 生效;
3.export LD_LIBRARY_PATH=newpath:LD_LIBRARY_PATH ,这种方式可以临时生效;

LD_LIBRARY_PATH=/root/sq:${LD_LIBRARY_PATH}
export LD_LIBRARY_PATH

PATH=/root/sq:${PATH}
export PATH

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_LANG

11:52:42 17 /etc/ld.so.conf.d:#/root/sq/sqlplus flt/flt123@\"//172.16.1.11:1521/flt\"

SQL*Plus: Release 10.2.0.3.0 - Production on Fri Jun 19 11:53:08 2015

Copyright (c) 1982, 2006, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL>

到此连接成功

下面是遇到的问题,因为在64系统里执行32位程序,需要安装一下glibc.i686即可
11:41:30 28 ~/sq:#./sqlplus flt/flt123@\"//172.16.1.11/flt\"
-bash: ./sqlplus: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

修复/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory问题

1、在64系统里执行32位程序如果出现/lib/ld-linux.so.2:
bad ELF interpreter: No such file or directory,安装下glic即可
sudo yum install glibc.i686

2、error while loading shared libraries: libz.so.1:
cannot open shared object file: No such file or directory
sudo yum install zlib.i686

GUI客户端

toad for oracle 12.6.0.53 freeware edition

Query Builder window

reverse engineering of queries  逆向工程的查询

两种访问方式:

快捷图标访问  query builder

菜单栏访问  database>report>query builder

query viewer

dockable panel  可停靠的

To access the Query Viewer

Do one of the following:
        From the View menu, select Query Viewer.
        From the Editor, right click, select Desktop and select Query Viewer.

Oracle Application Express (Oracle APEX),

SQuirreL SQL Client Version 3.7

如果您的工作要求您在一天之中连接许多不同的数据库 (oracle、DB2、mysql、postgresql、Sql Server等等),或者你经常需要在多个不同种类的数据库之间进行数导入导出。那么SQuirreL SQL Client 将会是比较理想的数据库客户端链接工具。
简单介绍:  
SQuirrel SQL Client是一个用Java写的数据库客户端,用JDBC统一数据库访问接口以后,可以通过一个统一的用户界面来操作MySQL PostgreSQL MSSQL Oracle等等任何支持JDBC访问的数据库。使用起来非常方便。而且,SQuirrel SQL Client还是一个典型的Swing程序,也算是Swing的一个比较成功的应用了。

数据库启动以后,查询

jdbc:oracle:thin:@192.168.1.70:1521:orcl

转载于:https://www.cnblogs.com/createyuan/p/4588182.html

oracle字符集与客户端相关推荐

  1. oracle服务器和客户端字符集的查看和修改

    一.什么是oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库 ...

  2. oracle客户端更改字符集,oracle 服务器跟客户端字符集的查看和修改

    oracle 服务器和客户端字符集的查看和修改 查看和更改oracle数据库字符集 1 数据库服务器字符集select * from nls_database_parameters, 其来源于prop ...

  3. zhs16gbk对应mysql_[Oracle] 彻底搞懂Oracle字符集

    基本概念字符集(Character set):是一个系统支持的所有抽象字符的集合.字符是各种文字和符号的总称,包括各国家文字.标点符号.图形符号.数字等.常见的字符集有ASCII,ZHS16GB231 ...

  4. oracle 字符集 AL32UTF8、UTF8

    简介:ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储.处理和检索数据.利用全球化支持,ORA ...

  5. Oracle 字符集的查看和修改

    一.什么是Oracle字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系.ORACLE支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据.它使数据库工 ...

  6. Oracle字符集的查看查询和Oracle字符集的设置修改

    本文主要讨论以下几个部分:如何查看查询oracle字符集. 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题. 一.什么是Oracle字符集 Oracle字符集是 ...

  7. oracle字符集查看、修改、版本查看

    1.先查服务端的字符集 或者 2.再查客户端的字符集 两个字符集(不是语言)一致的话就不会乱码了 CONVERT(c1,set1,set2)  [功能]将源字符串c1 从一个语言字符集set2转换到另 ...

  8. oracle查询本身字符集,Oracle字符集问题总结

    有过一些Oracle使用经验的朋友,大多会知道通过NLS_LANG来设置客户端的情况,NLS_LANG由以下部分组成:NLS_LANG=_.,其中第三部分的本意就是用来指明客户端操作系统缺省使用的字符 ...

  9. oracle的homes在哪里配置,Oracle字符集 简介

    三个组成部分(语言.地域.字符集),每个成分控制了NLS子集的特性. Language:指定Oracle消息使用的语言,校验,日期中月份和日显示.[指定服务器消息的语言] Territory:指定默认 ...

最新文章

  1. POPUP_TO_DECIDE
  2. c语言汉字属于什么类型_你知道你的身体属于什么类型么?
  3. 可能是最全面的 Java G1学习笔记
  4. js Date 函数方法
  5. 2.c++模式设计-工厂模式
  6. 如果是自学WEB前端的话,该如何才能找到一份7K实习生工作呢?
  7. 阳江口碑好的java培训价格
  8. hwui opengl VS skia opengl VS skia vulkan?
  9. 应用管理系列 — 怎么管理Sybase数据库
  10. 导航栏html_html操作和思考(二):统一导航栏文字高度的方法
  11. SSM酒店管理系统的设计与实现毕业设计源码260839
  12. 4、配置虚拟机IP地址
  13. python绝对值_python的绝对值
  14. mysql数据库用sql进行增删改操作
  15. MCU6050陀螺仪快速入门资料分享
  16. 大数据时代的变革与顺势而为——读《大数据时代》
  17. Painter X Liquid Ink(液体墨水)画笔
  18. 生物信息百Jia软件(28):canu
  19. 客户体验和营销:您需要了解的 5 个最佳实践
  20. 2021年危险化学品生产单位安全生产管理人员报名考试及危险化学品生产单位安全生产管理人员模拟考试

热门文章

  1. 计算机网络邮件客户编程,北京理工大学-计算机网络实践-实验4POP3邮件客户程序.docx...
  2. 市直系统推荐市级以上表彰的_浏阳市召开第六届教育科研成果表彰大会
  3. 第十六届全国大学生智能汽车竞赛 英飞凌特供芯片支持计划TC364TC377
  4. 第十五届智能车竞赛东北赛区普通四轮组冠军车-哈尔滨工业大学-紫丁香
  5. 对于继电器线圈奇怪的H-B曲线的实验测量
  6. 教师教学的“五个转化”能力
  7. qpushbutton 设置字体大小_怎样设置Qpushbutton 的大小
  8. matlab中tecdem,TopoToolbox: A set of Matlab functions for topographic analysis
  9. 问号和星号 php,星号和问号两个通配符
  10. java代码段替换,java-片段添加或替换不起作用