换行、回车、字符编码的理解

问题描述

在20190727当天投产时遇到了一个问题,容器中有字段A及相应的值,但数据入库时该字段为空。

对比投产前后的日志情况,发现投产后的SQL多了换行。无其它区别。

猜测可能是换行导致的。

问题排查

(应用采用的入库的方式:

1.将SQL配置到数据库中,字段列或条件列以","分隔

2.执行INSERT时,将字段或条件以","分隔成列表,进行一一对应。问题即出现在这里)

投产之前的sql:a,b,c,d,e,f,g

投产之后的sql:a,b,c,d,

e,f,g,

h

投产后的sql,按","分隔后的列表中,会出现换行符。即入库时发现没有"chr(10)e"这个字段,所以INSERT语句不会将e字段入库,但其余字段正常入库,导致系统测试时没有出现问题。

问题总结

1.如何管理(同一个平台,我把UPDATE语句添加了换行,其他人却没有。为什么会不统一?)

2.换行、回车的理解

3.字符编码的理解(字符集或编码格式的问题,困扰好久了。这次解决它)

1.管理问题

首先,这个问题是我的原因。为了方便查看,将内容进行了换行处理。

其次,平台没有明确的文档或口头约定说不能换行。

最后,系统测试阶段,案例和场景覆盖不完整;版本评审的时候,都没有想到换行操作会出现问题。

开发、领导都有问题,开发占40%,领导占60%。如何才能避免呢?多测试一个其它的场景就好了!但如何能在根本上或管理上避免这种问题(同一个平台,如何保证两个熟悉度不一致的开发人员正确的使用该平台),编写平台相关文档,但没人重视文档,全靠的经验。如果再有一个经验不多的人使用该平台,肯定还会出现类似的问题!

如何从另一方面避免这种问题呢?在开发阶段避免。要严格按照正规流程进行,需求分析,详细设计,方案评审,测试案例评审等等。每个阶段都要重视,否则就会出现问题。但同时有多个重要的事情要处理,怎么办?没有时间去评审方案或代码,没有精力去分析影响,怎么办?感觉只能排优先级,首先处理最重要的事情,并且要提高效率!

2.换行回车的理解

在计算机还没有出现之前,有一种叫做电传打字机(Teletype Model 33)的玩意,每秒钟可以打10个字符。但是它有一个问题,就是打完一行换行的时候,要用去0.2秒,正好可以打两个字符。要是在这0.2秒里面,又有新的字符传过来,那么这个字符将丢失。于是,研制人员想了个办法解决这个问题,就是在每行后面加两个表示结束的字符。一个叫做“回车”,告诉打字机把打印头定位在左边界;另一个叫做“换行”,告诉打字机把纸向下移一行。

类似中国古代的织布机,"回车"是将梭子推到起始位置,"换行"是编下一行。

"回车",光标移动到本行的最左边;"换行",光标移动到下一行。但在计算机中,因为不同操作系统的原因,这两个概念非常容易混淆。

在Unix中,每行结尾只有"<换行>",即"\n";在Windows中,每行结尾是"<回车><换行>",级"\r\n";在Mac里,每行结尾只有"<回车>",即"\r"

Unix或Mac系统下的文件在Windows里打开的话,所有的文件会变成一行(从Windows系统看Unix的文件,仍然保持了换行。可能是其它原因导致的);而Windows里的文件在Unix或Mac系统里打开,在每行的结尾会多出"^M"符号(确实如此,如果是配置文件则一定要注意这点!否则Unix读取到的配置文件信息与预期不符,带^M符号

ASCII码中,0D代表回车,0A代表换行。其余的参考:https://blog.csdn.net/silyvin/article/details/7275037

回归到本问题,将Windows系统中的带有换行的文本插入到Oracle中,换行就变成了chr(10)。

查询SQL如下:select  instr(colnumname, chr(10)) from tablename ;

select * from tablename where  instr(colnumname, chr(10))>0 ;

网上有文章写instr的速度比like的速度快。经过实测,两者速度大致相当。

select count(*) from xxx WHERE instr(HOTEL_NAME,'大')>0

select count(*) from xxx WHERE HOTEL_NAME like '%大%'

xxx表里的数据量为1亿,两条语句同时运行,第一条耗时202s,第二条耗时200s,速度几乎一样

---------------------

作者:bitcarmanlee

来源:CSDN

原文:https://blog.csdn.net/bitcarmanlee/article/details/50925364

版权声明:本文为博主原创文章,转载请附上博文链接!我没那么大数据量,两个方法试着没啥差别

3.字符编码的理解

https://mp.weixin.qq.com/s?__biz=MjM5MjAwODM4MA==&mid=2650711726&idx=3&sn=cab046de52787ae1493625e46b8544ad&chksm=bea6d77d89d15e6b7bd3843ad0d7530ef8534ea05d84aeb7d25b3b82af6dd60850347fecce33&scene=21#wechat_redirect

发布了57 篇原创文章 · 获赞 20 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/shafatutu/article/details/97636594
今日推荐