前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SQL文件的BOM问题导致的invalid character错误及解决

SQL文件的BOM问题导致的invalid character错误及解决

作者头像
大江小浪
发布2018-07-24 16:56:44
6360
发布2018-07-24 16:56:44
举报
文章被收录于专栏:小狼的世界

最近在做数据的搬运工,将Oracle中的数据搬运到ES中,方案很成熟了,使用Logstash的jdbc-input执行SQL,然后将结果输出到ES中。这么简单的问题,在测试环境中测试也一帆风顺,可一上生产环境傻眼了,始终报“ORA-00911 invalid character”的错误。

困扰了好几天,测试环境一直没问题,生产环境不管用多么简单的SQL都出同样的问题。最后,认真看了一下日志,突然发现 feff是什么鬼?

有了这个线索,百度了一下,原来是文件的BOM头,忽然想起来SQL文件是在Windows下用记事本保存为UTF-8格式的。在Linux下重新创建了一个空白文件,将SQL语句拷贝过去,再执行就没问题了。

只能说,尽量还是不要用记事本啊~~

如何查看文件是否含有BOM头

file 命令

在Linux下,可以简单的使用file命令来查看文件是否含有BOM头。

代码语言:javascript
复制
[root@bj1eccap01 ~]# file test.txt 
test.txt: UTF-8 Unicode (with BOM) text, with no line terminators
awk 命令
代码语言:javascript
复制
[root@bj1eccap01 ~]# hexdump test2.txt 
0000000 bbef 48bf 6c65 6f6c 5720 726f 646c bcef
0000010 0d81 000a                              
0000013
[root@bj1eccap01 ~]# find . -type f -print0 | xargs -0r awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
./test2.txt

删除BOM头

sed 命令
代码语言:javascript
复制
[root@bj1eccap01 ~]# sed -i -e '1s/^\xEF\xBB\xBF//' test2.txt 
[root@bj1eccap01 ~]# find . -type f -print0 | xargs -0r awk '/^\xEF\xBB\xBF/ {print FILENAME} {nextfile}'
[root@bj1eccap01 ~]# hexdump test2.txt 
0000000 6548 6c6c 206f 6f57 6c72 ef64 81bc 0a0d
0000010

这个问题反过来想,我觉得是 logstash 不支持含有 BOM 头的SQL文件,是不是可以给官方提交一个Feature来解决这个问题?

本文为作者原创。

参考资料: 1、带BOM的UTF-8 2、Byte order mark 3、How to check if file has a BOM in utf-8 text 4、Using awk/sed to detect/remove the byte order mark (BOM)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何查看文件是否含有BOM头
    • file 命令
      • awk 命令
      • 删除BOM头
        • sed 命令
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档