SQL> select length('哈哈') from dual;LENGTH('哈哈')
--------------
             4SQL> select lengthb('哈哈') from dual;LENGTHB('哈哈')
---------------
              4
--这里为什么两次都是4呢 第一回的结果不是应该是2才对吗SQL>SQL> select length('哈哈哈') from dual;LENGTH('哈哈哈')
----------------
               6SQL> select length('你好') from dual;
ERROR:
ORA-01756: quoted string not properly terminated
SQL> select length('呵呵') from dual;
ERROR:
ORA-01756: quoted string not properly terminated--这里为什么length中用'哈哈'可以 而用'呵呵'和'你好'就会报错

解决方案 »

  1.   

    因为你是英文系统,偶说过了哦
    我是可以的
    SQL> select length('你好') from dual;LENGTH('你好')
    --------------
                 2SQL> select lengthb('你好') from dual;LENGTHB('你好')
    ---------------
                  6不过为什么lengthb是6呢
      

  2.   

    说不定是这种情况呢
    A和B两个字符集吧A中的哈哈在B中有对应的转换
    A中的呵呵和你好在B中都不行呵呵 纯属猜测哦
      

  3.   

    哈哈 你也被我带着奇怪起来了恩 我把NLS_LANG改为SIMPLIFIED CHINESE_CHINA.ZHS16GBK后倒是可以插入了
    不过情况和你一样
    SQL> select length('你好') from dual;LENGTH('你好')
    --------------
                 2SQL> select lengthb('你好') from dual;LENGTHB('你好')
    ---------------
                  6嗯。。我仔细想想
      

  4.   

    google了一下,居然找到你以前问过的一个问题,哈哈 http://topic.csdn.net/u/20091023/13/0c25c69a-a327-4062-9961-2a8a07479153.html你自己忘记了吧SIMPLIFIED CHINESE_CHINA.ZHS16GBK 一个字是三个字节的
      

  5.   

    好了 我把你的问题想清楚了
    SQL> create table tt2(name varchar2(20));Table created.SQL> insert into tt2 values('哈哈');1 row created.
    SQL> col dump(name) format a20
    SQL> select name,dump(name) from tt2;NAME                 DUMP(NAME)
    -------------------- --------------------
    哈哈                 Typ=1 Len=4: 185,254
                         ,185,254--上面的这些实验是在NLS_LANG设置为AMERICAN_AMERICA.UTF8时做的
    --下面我重新开个cmd窗口 set NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    SQL> insert into tt2 values('哈哈');已创建 1 行。SQL> commit;--这个时候再进行查询 注意看两次dump的长度是不一样的
    SQL> select name,dump(name) from tt2;NAME                 DUMP(NAME)
    -------------------- --------------------
    鍝堝搱                 Typ=1 Len=6: 229,147
                         ,136,229,147,136哈哈                 Typ=1 Len=4: 185,254
                         ,185,254
    SQL>在SIMPLIFIED CHINESE_CHINA.ZHS16GBK环境下插入的哈哈长度为6
    而在AMERICAN_AMERICA.UTF8环境下插入的哈哈则为4
      

  6.   

    不小心又连续回帖三次 只好用马甲来了
    现在关于长度的问题已经完全搞懂了
    还剩下一个问题就是
    SQL> select length('哈哈哈') from dual;LENGTH('哈哈哈')
    ----------------
                   6SQL> select length('你好') from dual;
    ERROR:
    ORA-01756: quoted string not properly terminated
    SQL> select length('呵呵') from dual;
    ERROR:
    ORA-01756: quoted string not properly terminated--这里为什么length中用'哈哈'可以 而用'呵呵'和'你好'就会报错呢?
      

  7.   

    我GOOGLE了一下有人说是ORACLE对部分汉字的支持有问题
      

  8.   

    看来还是和字符集有关呀 搜到一个相关问题 大家有兴趣的话可以参考一下学习学习--如果服务器的字符集是zhs16CGB231280,在处理中文时会存在问题。如在客户端:   
      C:\>set   nls_lang=AMERICAN_AMERICA.zhs16CGB231280   
        
      C:\>sqlplus   user/password@server1   
        
      SQL>   create   table   t1   (c2   varchar2(10));   
      Table   created.   
          
      SQL>   insert   into   t1   values('昇大案');   
        
      1   row   created.   
        
      SQL>   insert   into   t1   values('喆');   
      ERROR:   
      ORA-01756:   quoted   string   not   properly   terminated   
        
        
      SQL>   insert   into   t1   values('喆2');   
        
      1   row   created.   
        
      SQL>   insert   into   t1   values('喆   ');   
        
      1   row   created.   
        
      SQL>   insert   into   t1   values('大   ');   
        
      1   row   created.   
        
      SQL>   select   c2,length(c2)   from   t1;   
        
      C2                   LENGTH(C2)   
      ----------   ----------   
      昇大案                             4   
      喆2                                     2   
      喆                                       2   
      大                                     2   
        
      SQL>   select   c2||'#',trim(c2)||'#'   from   t1;   
        
      C2||'#'           TRIM(C2)||'   
      -----------   -----------   
      昇大案#           昇大案#   
      喆2#                   喆2#   
      喆   #                   喆   #   
      大   #                 大#   
        
      --如在客户端将字符集改为zhs16gbk,则结果是:   
      C:\>set   nls_lang=SIMPLIFIED   CHINESE_CHINA.zhs16gbk   
        
      C:\>sqlplus   user/password@server1   
        
      SQL>   delete   t1;   
        
      已删除4行。   
        
      SQL>   insert   into   t1   values('昇大案');   
        
      已创建   1   行。   
        
      SQL>   insert   into   t1   values('喆');   
        
      已创建   1   行。   
        
      SQL>   insert   into   t1   values('喆2');   
        
      已创建   1   行。   
        
      SQL>   insert   into   t1   values('喆   ');   
        
      已创建   1   行。   
        
      SQL>   insert   into   t1   values('大   ');   
        
      已创建   1   行。   
        
      SQL>   select   c2,length(c2)   from   t1;   
        
      C2                                       LENGTH(C2)   
      --------------------   ----------   
      ?大案                                                 3   
      ?                                                         1   
      ?2                                                       2   
      ?                                                         2   
      大                                                         2   
        
      SQL>   select   c2||'#',trim(c2)||'#'   from   t1;   
        
      C2||'#'                                 TRIM(C2)||'#'   
      ----------------------   ----------------------   
      ?大案#                                 ?大案#   
      ?#                                         ?#   
      ?2#                                       ?2#   
      ?   #                                       ?#   
      大   #                                       大#