在SQLPLUS中执行SQL文件时发生错误:ORA-01756: quoted string not properly terminated
但是SQL其实是没有问题的,找了很多原因,发现可能是由于使用TOAD导出SQL insert语句,编码集的问题导致的。
首先在.bash_profile文件中添加环境变量指定编码集:
export NLS_LANG=American_America.AL32UTF8
但是这样做了还是不行,后来找到了解决方法:
使用类似Notepad++之类的文本编辑器将SQL文件的编码转换为 UTF-8无BOM编码格式
结果试下来就没有问题了。
##update 2020
感谢D-Xr
https://ask.csdn.net/questions/1052083
我的notepad最新版编码选项中没有UTF-8无BOM编码的选择,有谁能帮帮我吗?,
UTF-8无BOM编码就是“使用UTF-8编码”,UTF-8-BOM是有BOM的。
2.BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行,
3.
PHP文件的编码格式是UTF-8,而且是无BOM格式,如果编写PHP文件时用错编码,则输出尤其是中文会出现乱码。Windows自带的记事本默认是ANSI编码格式,另存时可将编码改成UTF-8,但不是无BOM格式,也是无法正确输出的。
WordPress在编写主题和插件的PHP代码文件时,一定要要遵循这个规定,专业的CODE编辑器可以解决编码问题。
在用Notepad++编写的php文件时,首先请将字符集设置正确,方法是点击菜单“格式→以UTF-8无BOM格式编码”。设置完成后,再编辑代码,保存时就自动设为UTF-8 无BOM 编码。以后再打开此文件无需再次设定。
##sample 2:
手工执行:
insert into zabbix_dg_config values ('1','2','57.12.32.29','d','3-报账系统移动端')
pl/sql deverloper 执行成功
linux 终端执行有问题。
DB 字符集
AL32UTF8
fix1:
将perl 修改为 TF-8无BOM编码格式 模式 ,没用
fix2:
.重新插入后,发现有错误ORA-01756 ,分析得出该错误是由于登陆工具的字符集编码和服务器上的编码不一致导致。
选择sercrt 选项/会话选项/外观/字符编码/ 将其由 默认 修改为 UTF8:
sqlplus 执行成功,但是perl 仍然报错 ORA-01756
将perl 文件设置为 SET NAMES utf8 ,问题规避
手工执行脚本perl zabbix_dg_config.perl ok