一次苦难的SQL SERVER 2005数据导入之旅

本文记录了一次将大型CSV文件导入SQL Server 2005数据库的过程中遇到的各种问题及解决方法,包括编码格式不匹配导致的乱码问题、数据截断等问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      上周末单位主机需要向服务器数据库(SQL SERVER 2005)内导入数个CSV大文件,结果临时抓壮丁把我给盯上了。想想应该也不难,但是事实证明,,,我太单纯了。。

开始我用数据库任务中的“导入数据”选项,里面有个“平面数据库”选项,我也没细看,直接一路下一步,结果悲剧了,提示什么“多个代码页,无法处理此列。”

我换了几个其它的CSV文件,结果都是提示这个错误,快下班了,跟经理说周一再来弄,经理说行,但是得保证弄好,我说OK,你就瞧好吧。经理说别大意,据说里面有3000多万条数据呢,回去好好想想怎么弄。。我当时就蛋碎了。。。。

  首先开始弄测试数据(单位数据不让拿回来),好几千万条呢,我突然灵光一显,拿出来尘封已久的移动硬盘,打开它,“酒店2000W”,映入我的眼帘,里面的N多CSV文件不就是现成的嘛。。。虽说只有2000万,还差1000万,不过问题不大,反正是测试。

 我拿这个CSV数据往我的SQL SERVER2005里面一导入,出现了错误,一模一样的

                                    

想想来去没思路,决定去度娘一下,说是与“选择数据源”时的“代码页”设置有关,真的这么简单,偶兴冲冲的再试一次,果然找到了这里(见下图)

我当时想当然的以为改为这个选项,就能自动纠正这个错误,可是,可是,错误依旧。。我又单纯了。

我当时小宇宙就爆发了。。TMD,直的不行就来弯的,我先把它导入access,然后再导入SQL 2005,想来想去,就这么办了。。。

打开access,“文件”--》“获取外部数据”-》“导入”,一番操作后,马上就要点击最后一步“完成”了,我强压住内心的激动,那种感觉就像马上阿波罗登月一样,我轻轻的单击了一下“完成”,一个残酷的现实击碎了我的梦。。

当时我觉得应该是里面200W条数据太多超出了内存极限,TMD,你有张良计,我有过墙梯!把你拆开不就得了。下载一个CSV大文件分割器,然后就变成了这样,当时我是以10W条数据一个文件来分割的,我想费点事就费点事吧,能成就行。

可是我又单纯了,导入是没有问题了,可是导入ACCESS后的数据有问题啊。这是个什么情况!!!!!中文前两个字没问题,可是最后一个字就变成乱码了。。我不知所措啊。。。

我心想把它用excel打开,看看能不能发现问题,可是我又错了,里面是10W行,我的是excel2003,只能打开65535行。。

这下子就蛋疼了,仿佛陷入了一个死结。我决定还是从源头那个代码页开始重新解决问题。因为如果问题处理越来越偏的话会越来越没有头绪。我突然发现如果无法从数据库那边纠正编码(就是代码页)错误的话,为什么不从CVS文件这边来解决呢?但是我需要一个能打开这么大文件的工具,excel2003肯定是不行了,2007我还不愿意下,度娘一下,你就知道!马上我就发现一个叫UltraEdit的好东东(不是广告哈)。看样子评价还不错。

打开csv文件一瞅,立刻就发现一个大问题,整个文件的格式全是UTF-8(65001),我再一看我那数据库的格式ANSI/OEM-简体中文GBK(936),看来问题就是这里了,因为文字编码格式不兼容,所以出现导入错误。问题是找到了,可是怎么弄呢?数据库是肯定不让改的,要是把单位数据库格式改了,一旦出了问题,估计经理会把我爆菊,那就只能改改CSV的编码格式了。在ultraedit中打开待转换文件,然后在菜单栏中“文件”--》“转换”--》“UTF-8转ASCII”,

等待一会,看到下面的状态栏中变成下图所示这样就OK了。

我弄到这里的时候感觉时间都快倒流了。终于,我又一次走到了局点。可是这次导入SQL SERVER2005又碰见问题了。真是一波未平一波又起啊。

一波未平一波又起?是大波吗?呵呵,我邪恶了。。。

错误截图如下:

开始我以为是表字段设置短了,那好,全TMD改成1000!

但是,改为之后,再导入,我擦,涛声依旧啊。。。。。打脸声拍拍的。。。

痛定思痛,仔细看看错误信息,截断情况有两种可能,要么是表字段(被导入的字段)过短,要么是源数据设置过短,难道是。。。

返回到源数据页,点击"平面数据源“--》”高级”,配置各列属性中,把outputcolumnwidth改为足够长度,全TMD改为1000,够长不???

然后点选“常规”项把代码页改为936(也就是ANSI/OEM-简体中文)再次导入。。。经过漫长的等待,终于。。。导入成功。。。这一刻,我不是欣慰,而是想把电脑砸了。。这么简单的问题,竟然搞了这么复杂。。。

     谨以此文铭记这次苦逼的数据之旅.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值