ORA-22866 default character set is of varying width
Cause: A character LOB was defined but the default character set is not fixed
width.
Action: Ensure that the character set is of fixed width before defining character
LOBs.是默认字符集设置的问题,和权限无关。你用scott和system登陆的时候环境是一样的吗?

解决方案 »

  1.   

    在init.ora里把compatible参数该到8.1.5以上试试
      

  2.   

    我的环境是这样的:我用的是oracle8.1.6,连接的是oracle8.0.5。
    两边的字符集都是一样的,我看过了。而且我直接在服务器(8.0.5)上用scott用户登陆,执行上面语句还是同样的错误。这就想不通了。
      

  3.   

    我把试验现象贴出来:SQL*Plus: Release 8.1.6.0.0 - Production on 星期一 9月 22 21:36:06 2003(c) Copyright 1999 Oracle Corporation.  All rights reserved.
    连接到: 
    Oracle8 Release 8.0.5.0.0 - Production
    PL/SQL Release 8.0.5.0.0 - ProductionSQL> CREATE TABLE TEST2 (AAA CLOB);表已创建。SQL> insert into test2 values('aaaaa');
    insert into test2 values('aaaaa')
                             *
    ERROR 位于第 1 行:
    ORA-22866: 默认字符集具有不同的宽度SQL> conn scott/tiger@dbsrv
    已连接。SQL> CREATE TABLE TEST2 (AAA CLOB);
    CREATE TABLE TEST2 (AAA CLOB)
                        *
    ERROR 位于第 1 行:
    ORA-22866: 默认字符集具有不同的宽度
      

  4.   

    我这边只有8.17,试了一下没有问题。你能不能做一下检查:
    1、客户端注册表中HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\中的NLS_LANG设置是什么?
    2、在服务器端执行select * from nls_parameters;检查nls设置
      

  5.   

    8。1。6:(client)
    HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\NLS_LANG=
    SIMPLIFIED CHINESE_CHINA.ZHS16GBK
    8。1。0(server)
    select * from nls_parametersNAME
    ---------------------------------------------
    VALUE
    ---------------------------------------------
    nls_language
    AMERICANnls_territory
    AMERICA++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    ------看来这出了问题,但我在服务器上注册表看过了,里面的nls都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK--怎么回事?
      

  6.   

    1、把注册表的nls设置改成和数据库的一致就可以,
    2、或者在执行sqlplus之前修改系统环境参数:
    DOS下:
    set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    UNIX下:
    export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    3、或者修改服务器参数使之和环境变量相同以上三种方式任选一种即可
      

  7.   

    如果你在服务器本地试也不行的话,那就跟字符级没有关系。
    我想还是版本的问题,你在817试
    数据库: Oracle 8i R3 (8.1.7) for NT 企业版SQL> create table a(a clob);SQL> insert into a values('1234');SQL> insert into a values('5648');
    SQL> SELECT * FROM A WHERE dbms_lob.instr(a.a,'12',1,1)>0;
    1234
      

  8.   

    如果你在服务器本地试也不行的话,那就跟字符级没有关系。
    我想还是版本的问题,你在817试
    数据库: Oracle 8i R3 (8.1.7) for NT 企业版SQL> create table a(a clob);SQL> insert into a values('1234');SQL> insert into a values('5648');
    SQL> SELECT * FROM A WHERE dbms_lob.instr(a.a,'12',1,1)>0;
    1234
      

  9.   

    在服务器上可以见表,但不能插入数据。服务器上8.0.5的注册表里的NLS_LANG参数都是SIMPLIFIED CHINESE_CHINA.ZHS16GBK但从数据字典立检索出来的就不全是了,session的nls是china,instance的nls 是american.是不是要用update更新这些数据字典啊?
      

  10.   

    你好,实在不行的话,给scott用户加一个大sysDBA的role.
      

  11.   

    你好,实在不行的话,给scott用户加一个sysDBA的role.