最近在处理客户的FTP下来的资料,出现如题的问题

txt文本里有如下记录:

广东省某某某某某某某某某公司-IC卡,100,100

广东省某某某某某某某某公司-IC?100,100

问题,下面这行的分隔符不见了,造成数据无法导入本地SQL2000

这个字段类型是varchar(30),这是最近的文档资料,但我发现导出的资料有超过30长度的。证明这个字段现在只是修改了文档资料为30长度,而数据库必然是大于30的,只是从其它工单表里转入资料时作了切断来满足现在文档的要求,否则也不可能完整存放长度大于30的字符串(第一行)。

而这个切断就出现了问题,其实我们看到的问号,并非是英文的问号,而是半个汉字与逗号的结合造成的乱码。

所以总结一下就是:数据长度刚好30,而且英文字符的数量是奇数,并且以汉字结尾

当然,如果是以英文结束并切断英文部分,是不会造成这个问题的;如果英文字符数量是偶数也没问题。

彻底解决方法:

这个问题的澈底解决方法是不要作切断,否则肯定会出现或多或少的问题。而至于要完整的切断一个中文,在处理效率上不现实。当然这是程序的问题了。

折衷的解决方法:

1. 本地文本替换问号为逗号,但不一定保险。因为目前除问号问题外,还出现了数据折行显示,甚至跳过几行等问题,其归根结底是中文切字造成不可见字符造成的。而且这个没什么规律。

因为我们虽然在notepad里看到的是问号"?",并且可以替换,但是编程来替换就不行,因为末字符是ascii>127的,而且你无法判断是半个字符,因为汉字就是两个半个字符组合而成,除非用我上面用黑体显示的那个规律来判断之。(与notepad里能看到问号是两码事)

2. 本地表加宽成varchar(40),导出是增加一个“A-Z”的字符,如果后面有半个字符则结合成一个字或者问号,从而不会与逗号结合。如果没有半个字符则显示出这个英文,影响也不大。

PB反编译大师,PB混淆加密大师 ,互联网数据组件:DataWindowHTTP,ESC/POS打印组件:ESC/POS ImagePrint(LPT,column format),SQLCloudODBC互联网数据库直连驱动

导出时选择用一条sql语句来筛选:select id,name=name+'A',price from tab_name where 1=1

我在sql2000里测试增加一个'A':IP专?3269334变成了: IP专蟌,3269334

如果末尾加英文的空格,显然比较贴切,有半个字符的显示为问号,但不吃掉逗号,而正常的记录只是多一个空格出来,完全不影响实际上使用。(推荐)

select id,name=name+' ',price from tab_name where 1=1

IP专?3269334 变成了: IP专?,3269334

然聪明的人能想到,先在末尾添加一个字符,再用left(name,len(name)-1)来处理也是可以的,因为left是基于一个完整的字符,英文算一个,汉字也算一个。

select id,name=left(name+'A ',len(name+'A')-1),price from tab_name where 1=1

(结果非常完美)

当然还有人认为不用添加一个字符,直接切掉末尾字符,当然没问题的字段也会被切掉一个,当然不可以。

3. 判断长度为30而且英文字符数为奇数,则切断末尾的半个汉字。这个方法太费劲。而且这种方法不是数据库维护人员能做到的。(简直没必要费这个劲)

4. 在导出时用sql语句把字段转换成nvarchar(30),我在sql2000里测试ok.

select id,name=cast(name  as nvarchar(30)),price from tab_name where 1=1

即说2,4的方法是可行的。windowxp+sql2000里我测试过。其它DBsys和OS未作测试。

//20070918续:

省公司照以上方案改进后,采用管道符号(ASCII=124)分隔。

不想出现这个错误:错误当前行中找到多列; 最后定义列的数据后发现非空白字符--没找到具体原因,看ms网站打sp3补丁即可(sp1修正的此问题)

解决了逗号问题,但我测试时仍然出现问题,什么问题呢,就是录入人员有时录入的是繁体的汉字(比如东莞录入成東莞),我把出现错误的行全部copy到一个文件里导入,在手动导入时的预览界面看到,繁体字的地方会被分隔成两行,从而报错。唉,真是好事多磨。

東(150+124) ---BIG5编码

億(131+124)---BIG5编码

可见如果按字节读,则会生出一个分隔符号来。如果要避免这个问题,可改用两个管道符号(||)

剩下繁体字的13笔资料有问题,采用双引号括起来,顺利通过。

最后明确了我要求:

1.每个文件必须要栏位的title
2.文件编码:ANSI
3.行分隔符:CR+LF(回车+换行)
4.文本限定符:双引号 ("")
5.每行分隔符号数量一致
6.不能出现折行,跳行,空白行等。

//20070925 append

如果某字段在前台界面里允许多行输入。也就是说可能存在用户会输入/r,/n这些不可见字符,则如果你导出时,还是使用/r/n作行分隔符号,就会出现跳行现象。所以这是你可以使用一些不会冲突的字符作行分隔符号,比如三个分号(;;;),即可避开问题。

关于SQL的char,varchar字段在导出时切断中文字符显示问号或乱码的问题[原创]相关推荐

  1. SQL中char varchar nchar nvarchar ntext区别和使用(资料汇总)

    SQL中char varchar nchar nvarchar ntext区别和使用(资料汇总) 2008年10月14日 星期二 23:57 一.SQL中char varchar nchar nvar ...

  2. SQL中char\varchar\text与nchar\nvarchar\ntext的区别

    SQL中char\varchar\text与nchar\nvarchar\ntext的区别 定义 特点 定义 char char(n)是长度不可变的,用于表示非Unicode字符数据.n代表该数据类型 ...

  3. 从sql中image类型字段中导出图片

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  4. sql查询,日期字段包含年月日时分秒,如何按日统计

    1.原数据 2.date_format格式化为年月日 select sku_id,trade_time,date_format(trade_time,"%y-%m-%d") as ...

  5. sql 使用保留字作为字段

    sql 使用保留字作为字段 进行查询时 需要在该字段上加上``符号 如 $sql = "select `year_month` from a";

  6. 关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别

    一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...

  7. mysql char null_关于mysql设置varchar 字段的默认值''和null的区别,以及varchar和char的区别...

    一.背景 根据业务需求,发现以前的同事在设计表的时候,很多字段都没有设置默认值.在mysql5.7版本之后,没有设定默认值的字段,在严格模式下是很容易报错的,所以我这边需要先给每个字段加上一个默认值. ...

  8. SQL中 char、varchar、text 和 nchar、nvarchar、ntext的区别

    1.char.char存储定长数据很方便,char字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间.               2. ...

  9. 讲sql语句导入mysql_SQL语句导入导出大全_MySQL

    /******* 导出到excel EXEC master..xp_cmdshell 'bcp SettleDB.dbo.shanghu out c:\temp1.xls -c -q -S" ...

最新文章

  1. Python:处理一些格式规范的文字
  2. anago 围棋_跳进我的碗里—关于中惒围棋加盟那些事
  3. android ui动画效果怎么做,AndroidUI 布局动画-为列表添加布局动画效果
  4. python3解释器执行long(10)的结果为_Python3解释器执行'AB2C3D'.lower().title()的结果是( )。...
  5. 计算机系统基础:总线结构知识笔记
  6. [转载] java如何实现一个字符串的反转和替换
  7. 算法分析与设计 —— 贪心算法「活动安排」「背包问题」「哈夫曼编码」
  8. pythonplot画多图间隔,matplotlib实现一页多图
  9. 初识公有云--公有云的相关概念
  10. 游戏录制软件哪个好?游戏录制软件推荐
  11. ZooKeeper系列:Leader选举
  12. linux 内网网络波动检测,Linux内网测试环境模拟网络丢包和延时
  13. 基于SSH框架开发的毕业生求职报名系统
  14. 华为暂缓校招,解散校招群,冲上热搜,引发应届生强烈不满!
  15. Redis:二、Redis常见命令
  16. 三层架构中网关在核心与汇聚的区别和实验
  17. 手机有监控功能?分分钟查询手机使用记录!早点知道就好了!
  18. linux软件安装 home,Ubuntu中安装建筑设计软件Sweet Home 3D
  19. 陈浩洋参访中馥科技集团仓储中心,直播单小时破百万
  20. C++中的try、catch跟throw以及传统处理异常的方法

热门文章

  1. 231个web前端的javascript特效分享(仅供本人学习,非教程类型)
  2. html中this的作用,JavaScript 中的 this :工作原理和陷阱
  3. 网络安全学习笔记Day01—Day10
  4. leetcode 1925. Count Square Sum Triples(python)
  5. android 图片 色温,屏幕色温测试及测试结果
  6. python开发工程师是什么级别_什么条件才能成为Python开发工程师
  7. IDM短信发送接口设计说明
  8. 协议大全 http协议 http://www.chinaitpower.com/Net/xieyi/HTTP/index.html
  9. 朱松纯:初探计算机视觉三个源头兼谈人工智能
  10. Android隐藏虚拟按键