千家信息网

隐藏在SQLServer字段中的超诡异字符该如何解决

发表于:2025-11-11 作者:千家信息网编辑
千家信息网最后更新 2025年11月11日,隐藏在SQLServer字段中的超诡异字符该如何解决,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。程序架构:B/S 开发环境:Windo
千家信息网最后更新 2025年11月11日隐藏在SQLServer字段中的超诡异字符该如何解决

隐藏在SQLServer字段中的超诡异字符该如何解决,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

程序架构:B/S 开发环境:Windows XP + IIS6 + VS2003 数 据 库:SQL Server 2000 部分功能:从 SQL Server 中导出数据到 Access。 这套系统做了大半年,这个导入导出还是问题不断,我负责的这块导入导出就是夹在网 络版和单机版系统之间,只要任何一边对数据库做了改动这个导入导出就会失败。哎,烦心 的事不止这些,最近又遇到了一个非常奇怪的问题。 由于之前的导入导出使用SQL Server 支持的OpenDataSource()函数来做,而当遇到 64位系统时就会遇到不支持Microsoft.Jet.OLEDB.4.0 ,所以重新编码,技术步骤是先从SQL Server 读数据到DataTable,然后遍历这个DataTable,对每一行,将里面的数据重新组合成一条Insert 语句,然后打开Access文件链接,执行刚才生成的Insert语句,将数据插入到Access中。 我最终提交给Access执行的语句是根据SQL Server中的数据拼出来,比如SQL Server :select a, b, c from tblTemp 提交给Access执行的语句就是:复制代码 代码如下: Str1 = "Insert into" Str2 = "tblTemp(a,b,c)values(" strResult = str1 & str2 & "'aa', 2, 'cc' " & ")"

这回的重大问题是在SQL Server 表的b字段中有特殊字符,此字符使我的程序无法拼出完整的字符串,拼出来的字符串strResult 有时不带最后的")",但奇怪的是,这个表总共有4万多条记录,只是组合个别记录才会出现这个现象。但是提交给Access执行肯定不通过,提示SQL语法错误。 我于是查询数据库的这条记录,用查询分析器查询没发现任何的特殊字符,问了同事后才知道,他说之前有过部分表中的某些字符保存了客户输入的回车换行符,我顿时大悟,对呀,回车换行符是看不见的啊,于是,想使用下面的语句查询字段中是否有回车换行符:复制代码 代码如下: select charindex(char(10), demc) from tblgc_jc_de where xh = 15641 select charindex(char(13), demc) from tblgc_jc_de where xh = 15641 select charindex(char(10) + char(13), demc) from tblgc_jc_de where xh = 15641 select charindex(char(13) + char(10), demc) from tblgc_jc_de where xh = 15641

但奇怪的是,返回都是0,也就是找不到。这就郁闷了,字段中到底存储了什么字符啊?,另一个同事教了一招,直接在企业管理器中返回该表的所有行记录,然后全选查看该字段,发现确实是多出一个字符: 不是回车换行符会是什么字符呢?在百思不解之际,突然想起,不如看看这个表物理数据,一定能查出存储在该字段的是什么字符。但是该表有44022条记录,查某一条记录的物理数据就是大海捞针,怎么办??? 我只想查询这条记录的物理数据要怎么做?能不能把这条数据放到另一个表中,这个表只有这一条记录,这不就可以查看了吗。哦,这个简单,其实我同时建立了一个临时的数据库,这个数据库只有一张表,这张表只有一条记录,就是包含上面那个有问题的记录,使用的SQL语句如下: -- TYZW 是正式库 use TYZW -- 创建一个临时数据库,然后将有问题的那条 -- 记录插入临时库。 create database tmpTYZW go select * into tmpTYZW..tblgc_jc_de from tblgc_jc_de where xh = 15641 go 现在是时候查看一下这条记录的物理数据了,首先要在sysindexes系统表中查找出该表在物理文件中的位置,然后我们可以通过 dbcc page 命令查看物理数据:接着使用dbcc page命令查看物理数据:

现在是时候看看这条记录的物理数据了:

天啊,竟然是0,真不晓得是怎么存进去的。问题终于知道在那了,但是要如何解决呢?最简单的方法就是将这个0替换掉,于是使用下列语句测试:

select replace(demc, char(0), '') as demc from tblgc_jc_de

但是不行,原因是replace函数找不到0这个字符,因为它查找是按两个字节来找的,所以直接在SQL Server上找也找不到这个字符,替换也替换不了。但是,我又想了一下,能不能使用二进制来查找和替换?看了一下资料,使用下面的SQL语句能找出0在该字段的位置:

查是能查出来了,但是我发现replace函数还是不能用,除非是替换4位,也就是0x0038。

最后实在无奈,只能直接把有这个特殊字符的地段截掉一个文字,也就是连那个38也不要了:

select

case when charindex(convert(varbinary(1),0x00),convert(varbinary(200),demc)) > 0

then substring(demc,1,len(demc)-1)

else demc

end as DEMC

from tblgc_jc_de

这就是我现在用的最终解决方案,因为我查询过,4万多条记录中只有8条有这个0在字段里面。所以就算截掉一个文字并影响程序的功能和显示。

看完上述内容,你们掌握隐藏在SQLServer字段中的超诡异字符该如何解决的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 字符 字段 物理 语句 问题 就是 查询 数据库 代码 只有 换行符 系统 特殊 也就是 函数 方法 程序 诡异 位置 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南郴州安卓软件开发 软件开发类项目总结报告 大学生开展网络安全教育 江苏网络安全知识竞赛完整答案 网络安全手抄报模板文字简单 北京国谷动力网络技术 快速破解服务器 安卓网络安全加密 数据库为啥不直接存储视频图片 网络安全方面存在的不足 大数据分布式应用服务器 合肥做网络安全公司程序员待遇 网络安全知识内容第一次网络 携程软件开发员工出差待遇 新乡市明煜网络技术有限公司 怎样提高微信网络安全 重新软件开发需要学多久 贵阳美好家软件开发 网络安全策略有哪些 网络安全跟it有什么区别 龙之谷服务器断开连接 安卓服务器连接不上 如何用vb读取表格数据库 网络安全随时待命 软件开发需要专升本 mysql数据库制作实例 徐州无线网络技术服务价格 win8服务器管理器不见 c 数据库连接 安全性 网络安全学院建设示范大学
0