Oracle编码
三、解决数据库乱码原理特辑内容
3.1 前言
在解决数据库乱码问题中,涉及到三个方面的字符集:1、oracel server端的字符集;2、oracle client端的字符集;3、dmp文件的字符集(只有在需要往数据库里面导入dmp文件的时候会涉及到这点)。
3.2 知识储备
查看Oracle客户端字符集:
SELECT * FROM V$NLS_PARAMETERS;--返回当前用户环境中设置的字符集
SELECT USERENV('language') FROM DUAL;--返回当前会话使用的字符集
特别说明:客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符,如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量>注册表>参数文件> 数据库默认参数
查看Oracle服务端字符集:
SELECT * FROM NLS_DATABASE_PARAMETERS;--返回Oracle server端的字符集,来源于props$,是表示数据库的字符集
查看dmp文件的字符集:
用oracle的exp工具导出的dmp文件也包含了字符集信息,dmp文件的第2和第3个字节记录了dmp文件的字符集。如果dmp文件不大,比如只有几M或几十M,可以用UltraEdit打开(16进制方式),看第2第3个字节的内容,如0354,然后用以下SQL查出它对应的字符集:
“select nls_charset_name(to_number('0354','xxxx')) from dual;”
如果dmp文件很大,比如有2G以上(这也是最常见的情况),用文本编辑器打开很慢或者完全打不开,可以用以下命令(在unix主机上):
“cat exp.dmp |od -x|head -1|awk '{print $2 $3}'|cut -c 3-6”
然后用上述SQL也可以得到它对应的字符集
NLS_LANG参数格式:
Language_Territory.Clientcharacterset
其中,Language显示oracle消息,校验,日期命名,Territory指定默认日期、数字、货币等格式Clientcharacterset指定客户端将使用的字符集。比如NLS_LANG=AMERICAN_AMERICA.US7ASCII。AMERICAN是语言,AMERICA是地区,US7ASCII是客户端字符集。在解决客户端和服务端编码不一致问题导致的乱码时,Language和Territory可以不一致,但是Clientcharacterset必须一致。
其他数据库字符集查询相关语句:
实例字符集环境
SELECT * FROM NLS_INSTANCE_PARAMETERS;--显示由参数文件init.ora定义的参数
主要涉及NLS_LANGUAGE、NLS_TERRITORY的值. NLS_INSTANCE_PARAMETERS其来源于v$parameter,注意:网上很多资料都说"NLS_INSTANCE_PARAMETERS 表示客户端的字符集的设置,可以是参数文件,环境变量或者是注册表",而且网上都人人亦云。记住它是表示实例的字符集环境
数据库可用字符集参数设置
SELECT * FROM V$NLS_VALID_VALUES
会话字符集环境
SELECT * FROM NLS_SESSION_PARAMETERS;
它来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是ALTER SESSION完成,如果会话没有特殊的设置,将与 V$NLS_PARAMETERS一致
设置ORACLE的语言以及编码,添加环境变量:“NLS_LANG = SIMPLIFIED CHINESE_CHINA.AL32UTF8”,
(SIMPLIFIED CHINESE_CHINA.AL32UTF8是中文UTF8编码类型,其它类型可通过语句select userenv(‘language’)from dual进行查询,如果编码不对,会产生乱码
Oracle编码的更多相关文章
- oracle编码转换:AL32UTF8->ZHS16GBK
--修改Oracle数据库字符集为utf-8: SQL>conn / as sysdba; SQL>shutdown immediate; SQL>startup mount; SQ ...
- oracle 编码
select * from nls_database_parameters where parameter ='NLS_CHARACTERSET'; PARAMETER VALUE --------- ...
- Oracle 数据库导入数据和编码问题
配置 control 文件: load data characterset utf8 append into table role_res_gold fields terminated by ';' ...
- Oracle 乱码
导入DMP之后 ..... 1.Oacle数据库表中数据乱码 请检查导出DMP的ORACLE数据库编码设置 修改ORACLE编码与原DMP导出编码一致 select userenv('language ...
- oracle 转 mysql 最新有效法(转)
关键字:Oracle 转 MySQL . Oracle TO MySQL 没事试用了一下Navicat家族的新产品Navicat Premium,他集 Oracle.MySQL和PostgreSQL管 ...
- Windows下Oracle不显示中文[已解决]
跟着视频学习,然后讲到插入的时候有中文性别,就GG了,该显示中文的时候都是问号,觉得应该是编码的问题. 于是上网找了下,测试可行,方法如下 1,查询Oracle编码的语句: [sql] SELECT ...
- Oracle结构知识学习+部分函数实例
一 Oracle的结构1 实例(instance) 是内存和后台进程的集合, 数据库是数据的物理储存;实例和数据库的关系是一对多的关系;2 多个实例同时驱动一个'数据库'的架构 叫集群(RAC)3 O ...
- oracle 转 mysql 最新有效法
关键字:Oracle 转 MySQL . Oracle TO MySQL 没事试用了一下Navicat家族的新产品Navicat Premium,他集 Oracle.MySQL和PostgreSQL管 ...
- oracle导表小结
事件描述:从A主机oracle服务器导出.sql文件到B主机,发现1.导入存在乱码 2.提示USERS表空没有权限(A B主机均为window系统) 1.针对第一点乱码 首先确认系统的默认字符编码GB ...
随机推荐
- 继续mysql8navicat12连接登录的异常
今天登录使用navicat登录连接本地mysql,一直提示Navicat Premium 12连接MySQL数据库出现Authentication plugin 'caching_sha2_passw ...
- angular学习笔记(3)
一.angular的核心 1.组件 2.指令 3.服务 4.依赖注入
- 随手记-egg入门
egg 入门 https://eggjs.org/zh-cn/intro/quickstart.html 1.建立项目目录2. npm i egg --save && npm i ...
- springboot配置视图控制器
实现WebMvcConfigurer接口 /** * @descripte 配置自己的视图解析器 */@Configurationpublic class MyViewConfigController ...
- lldb调试mysql 插件命令
# attach process llvm process attach --pid 64924 # 添加断点 breakpoint set -n dispatch_command(enum_ ...
- web前端学习python之第一章_基础语法(一)
web前端学习python之第一章_基础语法(一) 前言:最近新做了一个管理系统,前端已经基本完成, 但是后端人手不足没人给我写接口,自力更生丰衣足食, 所以决定自学python自己给自己写接口哈哈哈 ...
- C#设计模式(0)-设计模式系列文章导航
设计模式系列文章导航 C#设计模式(1)——单例模式(SingletonPattern) C#设计模式(2)——简单工厂模式(SimpleFactory) C#设计模式(3)——工厂方法模式( ...
- week4_1
---恢复内容开始--- _________________________________列表生成式_____________________ a = [a*2 for a in range(10) ...
- 关于Servlet的一些归纳(2)
1.web项目结构 根路径: 文件夹 文件 WEB-INF: lib(存放一些jar文件) classes(存放class文件) web.xml 2.GenericServlet类 实现了Servle ...
- SpringBoot Actuator
SpringBoot Actuator 提供了检查项目内部信息的一整套API,通常在项目启动时可以看到. 1.引入依赖包 <dependency> <groupId>org.s ...