`

导数据需要解决的问题

 
阅读更多

数据库服务器字符集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字符。如果多个设置存在的时候,alter session>环境变量>注册表>参数文件
  
  字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是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

SQL>select userenv(‘language’) from dual;
AMERICAN _ AMERICA. 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端相同的字符集。

补充:
(1).数据库服务器字符集
select * from nls_database_parameters
来源于props$,是表示数据库的字符集。

(2).客户端字符集环境
select * from nls_instance_parameters
其来源于v$parameter,表示客户端的字符集的设置,可能是参数文件,环境变量或者是注册表

(3).会话字符集环境
select * from nls_session_parameters
来源于v$nls_parameters,表示会话自己的设置,可能是会话的环境变量或者是alter session完成,如果会话没有特殊的设置,将与nls_instance_parameters一致。

(4).客户端的字符集要求与服务器一致,才能正确显示数据库的非Ascii字符。
如果多个设置存在的时候,NLS作用优先级别:Sql function > alter session > 环境变量或注册表> 参数文件> 数据库默认参数

字符集要求一致,但是语言设置却可以不同,语言设置建议用英文。如字符集是zhs16gbk,则nls_lang可以是American_America.zhs16gbk。

分享到:
评论

相关推荐

    datax数据从hive导入mysql数据缺失解决

    ### DataX 数据从 Hive 导入 MySQL 数据缺失解决 #### 背景介绍 在大数据处理领域,Hive 和 MySQL 分别作为数据仓库与关系型数据库的重要组成部分,在数据流转过程中承担着关键角色。Hive 通常用于存储海量数据并...

    excel导入外部数据出现问题的成因及解决方案

    1. 单独安装供 2003 版本导入数据用的“ODBC 数据源管理器”中的 Excel 驱动程序“Excel files Microsoft Excel Drive(*.xls)”。这可以确保 Excel 2003 和 2007 版本的驱动程序不冲突,从而解决导入外部数据时...

    解决MotinBuilder导入bvh数据滑步问题教程

    总之,解决MotionBuilder中bvh数据的滑步问题需要对角色的根节点、骨骼权重、IK设置以及MotionBuilder的内置工具进行细致的调整。通过理解这些问题的根源和掌握相应的解决方法,你可以提高工作效率,创作出更加真实...

    oracle Imp导入数据

    Oracle IMP 导入数据乱码问题解决方法 OracleIMP 命令是 Oracle 数据库中的一种数据导入工具,但是在使用 IMP 命令导入数据时,经常会碰到乱码问题。这篇文章将从根本上解决了导入数据乱码的根源及解决办法。 IMP ...

    sqoop导入数据到hive中,数据不一致

    解决这些问题需要对Sqoop和Hive的底层原理有深入理解,并结合日志分析和调试。在实际操作中,通常需要尝试多种策略,以找到最适合特定场景的解决方案。对于复杂的问题,可能还需要查阅官方文档或社区讨论,以获取...

    Oralce数据导入导出及常见问题

    - **优化索引和约束**:在导入数据前暂时禁用索引和约束,导入完成后再次启用,可以显著提升导入速度。 - **利用分区技术**:对于大型表,可以考虑使用分区技术来加速数据的导入导出。 ##### 2.3 字符集不匹配 **...

    streamsets数据采集常见问题汇总1

    使用场景:从Oracle导入数据到Hive。 问题描述:Oracle中的非空字段在Hive中显示为NULL。 解决方法:使用JDBC Query Consumer组件,并在SQL查询中使用Oracle的TO_CHAR函数来转换数据类型,确保数据能正确导入。 ...

    Sqlserver大数据量插入速度慢或丢失数据的解决方法

    本文将详细介绍如何解决SQL Server在大数据量插入时出现的速度慢以及数据丢失的问题,并提供具体的解决方案。 #### 插入速度慢的原因分析 1. **事务日志管理**:SQL Server默认情况下会对每一次插入操作进行事务...

    SQL 混合数据导入丢失解决方案.docx

    ### SQL Server导入Excel数据时混合数据丢失问题及解决方案 #### 一、问题概述 在将Excel数据导入到SQL Server数据库的过程中,经常会遇到由于数据类型的不匹配或者格式问题导致的数据丢失现象。这种问题不仅会影响...

    向SQL Server数据库中导入数据报错解决方法

    SQL Server 数据库导入数据报错解决方法 SQL Server 是一种功能强大且广泛使用的关系数据库管理系统,由 Microsoft 公司开发。随着数据量的增加和业务需求的变化,对 SQL Server 数据库的数据导入变得越来越频繁。...

    oracle19c升级时区版本 32->42,解决数据泵导数据TSTZ报错

    "Oracle19c升级时区版本 32->42,解决数据泵导数据TSTZ报错"这个话题涉及到Oracle数据库中的时间区域设置,以及如何解决在数据导入过程中遇到的问题。以下将详细讨论这些知识点。 1. **时区版本**:Oracle数据库...

    SAS EG导入UTF-8编码的文本数据文件时的乱码问题解决方法

    4. 如果上述步骤未能解决问题,可以尝试使用第三方的文本编辑器工具,如本文中提到的“Maruo秀丸”软件。该软件可能帮助识别和复制特殊字符,这是因为某些特殊字符在SAS EG的导入向导中可能无法直接处理。 5. 在...

    PIO导入大量数据时的解决内存溢出问题.doc

    PIO 导入大量数据时的解决内存溢出问题 PIO 是一个 Java 库,用来读取和写入 Microsoft Office 文档,如 Excel、Word 等。然而,在导入大量数据时,PIO 经常会出现内存溢出的问题。这种情况下,我们需要找到一种...

    导入机器学习boston数据集报错问题解决

    导入机器学习boston数据集报错问题解决

    SQL Server7.0数据库导入数据时出现的符号问题及其解决方法.pdf

    SQL Server 7.0 数据库导入数据时出现的符号问题及其解决方法 本文主要介绍了在使用 SQL Server 7.0 导入数据时出现的符号问题及其解决方法。文章首先介绍了项目的背景和目的,然后详细介绍了数据准备、临时数据库...

    数据治理解决方案-V1.9.pptx

    元数据的版本更新需要审批,且涉及业务和技术元数据的导入、映射管理和影响分析,确保数据的准确性和一致性。 7. **接口和权限集成**:数据治理解决方案还涵盖了元数据管理接口的二次开发,以适应不同系统的数据...

    java解决hive快速导数据到Hbase代码

    要实现在Java中从Hive到HBase的快速导数据,我们需要遵循以下步骤: 1. **配置环境**:确保你已经安装了Hadoop、Hive和HBase,并配置了相应的环境变量。同时,确保Hive和HBase能够正常运行,并且它们的配置文件(如...

    批量导入Excel数据到数据库,带数据校验/事务回滚

    5. **错误处理与日志记录**:为了解决导入过程中可能出现的问题,需要记录详细的日志,包括成功导入的记录、失败的记录以及失败的原因。这有助于后期排查问题和优化流程。 在事务回滚方面,`TransactionScope`提供...

    java poi 导入大数据量Excel数据 防止内存溢出处理.zip

    但这种方法并不能根本解决问题,因为内存限制仍然存在,尤其是在处理大量数据时。 3. **迭代读取行**:使用POI的XSSF或HSSF API,可以通过迭代行而不是一次性加载所有数据来读取Excel文件。每次只处理一行,处理完...

    js前端Excel大数据处理导入

    为了解决这个问题,我们通常会采用分片上传和处理的策略。这意味着将大型Excel文件拆分为小块,逐个读取、处理和上传。这样可以避免一次性加载大量数据,减少内存占用,并提高用户体验,因为用户可以实时看到进度,...

Global site tag (gtag.js) - Google Analytics