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
- [oracle@localhost Oracle_proc]$ file *
- bill_query_proc.sql: UTF-8 Unicode C program text
- crt_tab_hytpdtsmsshistorydb.sql: UTF-8 Unicode(with BOM)text
可以通過兩種方法修改文件的編碼類型:
1.使用VI修改文件的編碼類型
:set encoding = utf-8
:set nobom
2.使用windows下的ultraedit,另存為 UTF-8 -無 BOM
修改完成後,無論使用中文,還是英文,或者去掉注釋,都能正常執行。