UTF-8 Unicode (with BOM),导致SQL脚本执行报错

关于带BOM和不带BOM的区别,大家可以看一下知乎上的讨论。
链接:「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?

最近开发过程中遇到,windows下编写的SQL文件,在linux下执行时,总是报错。

在文件的开头,无论是使用中文注释还是英文注释,甚至去掉注释,也会报SP2-0734:unknown
command beginning”?declare…”-restofline ignored. 的错误。
如下是文件开头部分

--create tablespace
declare
v_tbs_name varchar2(200):='hytpdtsmsshistorydb';
begin

报错如下:

SP2-0734: unknown command beginning "?--create ..." - rest of line ignored.


PL/SQL procedure successfully completed.

网上没有找到类似问题的解决办法,且文件编码确认已经更改为utf-8,该问题困惑了我很久。
最后查看一下BOM与 no BOM的区别,尝试更改为no
BOM,居然就没有再出现错误。

查看文件的编码,正常文件与报错文件的区别在于:with BOM

[[email protected] Oracle_proc]$ file *
bill_query_proc.sql: UTF-8 Unicode C program textcrt_tab_hytpdtsmsshistorydb.sql: UTF-8 Unicode(with BOM)text

可以通过两种方法修改文件的编码类型:
1.使用VI修改文件的编码类型
:set encoding = utf-8
:set nobom

2.使用windows下的ultraedit,另存为 UTF-8 -无 BOM

修改完成后,无论使用中文,还是英文,或者去掉注释,都能正常执行。

Unicode (with BOM),导致SQL脚本执行报错
关于带BOM和不带BOM的区别,大家可以看一下知乎上的讨论。 链接:「带 BOM 的
UTF-8」和「无 BOM 的…

Author

发表评论

电子邮件地址不会被公开。 必填项已用*标注