none
SSIS DTSX包导入数据时,汉字编码同分隔符编码冲突,导致不能导入数据,求解决,多谢!1 RRS feed

  • 问题

  • 操作系统:windows 2012  (简体,中国)
    数据库:SQL server 2014 (简体,中国)

    平面文件连接管理器,
    区域设置:中文(简体,中国)
    代码页:936(ANSI/OEM-简体中文GBK)
    列分隔符:竖线 {|}


    源文件格式:ANSI
    导入数据时,下面数据行不能导入。
    出错数据:24102137|梁宏褆|240
    当把“褆”删除,本行数据正常导入。
    用UlrtaEdit 查看出错数据,16进制代码如下:
    00000000h: 32 34 31 30 32 31 33 37 7C C1 BA BA EA D1 7C 7C ; 24102137|梁宏褆|
    00000010h: 32 34 30                                        ; 240

    发现“褆”的16进制代码是“D1 7C”,分隔符“|”的16进制代码是“7C”。
    原来是“褆”的16进制代码同分隔符“|”的16进制代码产生冲突所致。
    把“褆”删除,本行数据正常导入。


    求解决方法。。多谢。。


    2016年9月9日 6:17

答案

  • _,

    根据你的描述和你提供的样本,我尝试去重现你的问题,并且这个问题可以被成功地重现。

    同时我发现像其它汉字(褆珅瘄皘...)它们的十六进制编码里面也包含7C,如果你的记录里面包含这些汉字的话这个错误也会出现。

     

    并且我个人感觉这个问题确实有可能是因为这些字的十六进制代码中包含7C|的十六进制代码7C冲突了。

    经过我的测试,如果用文本限定符把列里面的值包裹起来,并在平面文件连接管理器启用文本限定符可能是一个方法。  



    另外,如果把text文件的编码格式从ANSI改为Unicode的话,这些汉字会是另一种十六进制代码,并且不会与|的十六进制编码重复。这可能也是一个方法,但是在加载到目标之前你可能需要用数据转换控件进行下数据转换。  


    如果有任何问题的话, 请随时发帖。


    Regards, Seif

    • 已标记为答案 丹_青 2016年10月24日 6:02
    2016年9月13日 10:31