今天在部署一个脚本的时候,碰到了一个奇怪的问题,脚本运行过程中报了一个ora错误
ORA-01756: quoted string not properly terminated

看这个错误似乎是哪里的标点符号出了问题,没有正确结束,本来这个问题看起来很明显,很可能是格式的问题,但是奇怪的是插入中文,有的语句可以,有的就不可以。
我们先来看看环境变量的设置,然后复现一下这个问题
$ echo $NLS_LANG
American_America.zhs16gbk
$ locale
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_PAPER="en_US"
LC_NAME="en_US"
LC_ADDRESS="en_US"
LC_TELEPHONE="en_US"
LC_MEASUREMENT="en_US"
LC_IDENTIFICATION="en_US"
LC_ALL=
查看数据库字符集
SQL>  select *from database_properties where property_name='NLS_CHARACTERSET'
PROPERTY_NAME                  PROPERTY_VALUE                 DESCRIPTION
------------------------------ ------------------------------ ------------------------------
NLS_CHARACTERSET               ZHS16GBK                       Character set

复现问题
创建一个临时表test,然后向里面插入两条记录
SQL> create table test(id number,title varchar2(20));
Table created.
第一条记录没有问题
SQL> insert into test values(1,'你好'); 
1 row created.
当尝试插入“蜀黍”的时候就爆了格式错误,难道Oracle不喜欢这种称谓?
SQL> insert into test values(2,'蜀黍');
ERROR:
ORA-01756: quoted string not properly terminated
如果在后面加一个空格,就可以了
SQL> insert into test values(2,'蜀黍 ');
1 row created.
我们来简单看一下,是否那个空格还在那儿。
SQL>select '>'||title||'<',id from test 
'>'||TITLE||'<'                ID
---------------------- ----------
>蜀黍 <                        2
还不甘心,决定使用trim来格式化一下,语句运行成功,但是没有效果,空格还在那儿。
删除第一条记录,注意力就关注在
delete from test where id=1;
SQL> update test set title=trim(title);
1 row updated.
SQL> select '>'||title||'<',id from test;
'>'||TITLE||'<'                ID
---------------------- ----------
>蜀黍 <                        2
以上的方法和测试都不见效,那就使出大招,看看dump的结果
SQL> select dump(title) from test;
DUMP(TITLE)
--------------------------------------------------------------------------------
Typ=1 Len=7: 232,156,128,233,187,141,32
可以看到末尾显示是32,是一个空格
SQL> select '>'||chr(32)||'<' from dual;
'>'
---
> <

整个字符串占用了7个字节,空格占用一个,即每个汉字占用3个,这个方式应该是在字符集为UTF-8的情况

查看客户端中设置的字符集,还确实就是UTF-8

修改secureCRT的字符集为默认的方式,即支持中文,然后再次插入,就没有问题了。
SQL> insert into test values(2,'蜀黍 ');
1 row created.
这个时候重新审视数据,发现原来插入的那条记录已经显示为乱码了。说明最开始插入就有字符集的问题了。
SQL> select * from test;
        ID TITLE
---------- --------------------
         2 铚?榛?
         2 蜀黍
使用dump的方式可以看到两者还是有着天壤之别。
SQL> select dump(title) from test;
DUMP(TITLE)
--------------------------------------------------------------------------------
Typ=1 Len=7: 232,156,128,233,187,141,32
Typ=1 Len=5: 202,241,202,242,32         
这个时候我们再来看一看dump的结果,可以看到在UTF-8的情况是每个汉字占用3个字节,在GBK模式下,是占用2个字节。
所以字符集的问题总是一个热点问题,客户端的设置也尤为重要,需要考虑字符集的兼容性。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23718752/viewspace-1795908/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23718752/viewspace-1795908/

原来Oracle也不喜欢“蜀黍”相关推荐

  1. 原来Oracle也不喜欢“蜀黍(r6笔记第54天)

    今天在部署一个脚本的时候,碰到了一个奇怪的问题,脚本运行过程中报了一个ora错误ORA-01756: quoted string not properly terminated 看这个错误似乎是哪里的 ...

  2. 新希望美好辣子蜀黍小火锅招商

    对于上班族来说,吃饭是一个问题,怎样吃最方便,最快呢,还想吃点自己喜欢的,这几项要求加在一起着实有点困难,不过再难也会有商家解决的,方便面已经慢慢退出这些人的视线,方便小火锅出现了,完全填补了这项空缺 ...

  3. ***偷删警察蜀黍文件

    有个很有意思的观点:"***"以前是个褒义词,现在是个贬义词. 为什么这么说?早期***的定义是以极高的技术动因考察现有系统架构,找出其脆弱性并提出修补方案.而现在的***找出脆弱 ...

  4. 看板方法:向交警蜀黍学习怎么做软件

    进入汽车时代,拥堵成为日常生活的一部分,上图中拥堵的过桥场景,相信每个人都经历过,各个方向的来车拥塞在狭窄的大桥上,彼此争夺,互不相让,结果是大家都寸步难行,那么,生活中我们的交警蜀黍怎么解决这个问题 ...

  5. 和警察蜀黍拍照像“抓捕现场”?效哥告诉你正确拍照姿势!

    涨知识 "公安"广义上是指人民警察,分为公安部门管理的公安警察(即狭义"公安",包括治安警.户籍警.刑警.交警等).国家安全部门管理的国家安全警察.劳改劳教部门 ...

  6. SSM毕设项目校园书蜀黍易购平台xk9g6(java+VUE+Mybatis+Maven+Mysql)

    SSM毕设项目校园书蜀黍易购平台xk9g6(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilder ...

  7. 警察蜀黍权威数据告诉你,广东少男最易遭受网络诈骗

    讲真,男女比例失衡这种事情,在诈骗受害者中也很严峻. 放心,雷锋网(公众号:雷锋网)不会骗你,有数据才有真相. 1月16日,由公安机关与360安全中心联合发起的猎网平台发布<2016年网络诈骗趋 ...

  8. 渣蜀黍 - iOS 个人笔记(一)_数据处理

    //获得沙盒路径 +(NSString *)getDocumentPath{NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumen ...

  9. 车内看车头正不正技巧_科二曲线行驶技巧图解,蜀黍手把手教你过关!

    曲线行驶看似比较简单 但很多人 在左.右打方向盘的过程中会把自己绕晕 导致心情紧张,操作不当 考试通不过! 下面 蜀黍为您准备曲线行驶技巧图解 手把手教你过关! ↓↓↓ 第一步,车辆驶向曲线行驶考试区 ...

最新文章

  1. 财报上的云计算战场: 巨头们垄断加剧
  2. 什么命令看服务器系统,查看linux系统版本可以使用什么命令_网站服务器运行维护...
  3. python3 模块编写_python3 _pickle模块详解
  4. Linux 用户管理相关命令
  5. [BUUCTF-pwn]——bjdctf_2020_babystack
  6. java 生成log4j_Java log4j配置每天生成一个日志文件 - 永恒ぃ☆心 的日志 - 网易博客...
  7. 安装ElasticSearch过程遇到的坑
  8. qtextedit改变单个字的颜色_孩子从“妈妈”叫到“妈”,称呼少了一个字,暗示孩子三方面变化...
  9. python面向对象_05(面向对象封装案例 II)
  10. linux删除pdf密码
  11. PHP添加文字图片水印
  12. 高德地图的circle圈
  13. termux安装以及基本配置
  14. C#开发基于ESMTP协议的邮件发送系统经验总结
  15. TabLayout——浅谈
  16. 错过了愚人节,还有清明节
  17. 宇宙学colossus库介绍
  18. LINGO实例,优化问题1
  19. 【LeetCode】老虎证券面试-括号嵌套且满足优先级
  20. 决策树实现预测是否购买点电脑

热门文章

  1. Idea内存占用过高解决方法
  2. writeline是什么意思_c语言console.WriteLine什么意思?
  3. 三国无双之雄霸天下java下载,三国之雄霸天下
  4. 文件上传绕过之00截断
  5. video.js 视频截图、录制、自定义全屏,hls、flv、mp4视频播放
  6. 转换word等文件为swf文件
  7. 【华为OD机试真题 JS】跳格子游戏
  8. arduino 土壤温湿度传感器_怎样将Arduino与土壤湿度传感器FC-28连接起来
  9. 【hdu 5512】【 2015ACM/ICPC亚洲区沈阳站】Pagodas 题意&题解&代码(C++)
  10. Java中被你忽视的四种引用