各位大侠!你们好!小弟请问一个问题:前几天我的oracle里面的表中有些字段的类型为CHAR(11)或者VARCHAR2(30),但是我改过字符集了,现在那些字段的类型变成CHAR(11BYTE)或者VARCHAR2(30BYTE)了,结果原来查询很正常的数据,现在查询就出问题了。请问我如何才能改回我原来的CHAR(11)或VARCHAR(30)?感谢大侠的指教!

解决方案 »

  1.   

    ...怎么改的字符集的?
    char类型的长度单位分成byte和char,没有指定的话默认就是byte
    查询出问题是什么错误信息?
      

  2.   


    desc user_tab_columns
    Name                 Type          Nullable Default Comments   
    -----------------------------------------------------------------
    DATA_LENGTH          NUMBER                         Length of the column in bytes--注意这里
    ......
    SQL> create table ttt( col_1 CHAR(11), col_2 VARCHAR2(30));
    SQL> select COLUMN_NAME,DATA_TYPE,DATA_LENGTH
      2  from user_tab_columns
      3  where table_name='TTT';
     
    COLUMN_NAME                    DATA_TYPE                                                                        DATA_LENGTH
    ------------------------------ -------------------------------------------------------------------------------- -----------
    COL_1                          CHAR                                                                                      11
    COL_2                          VARCHAR2                                                                                  30
     
    SQL> create table tttt(col_1 char(11 char),col_2 varchar2(30 char));
     
    Table created
     
    SQL> 
    SQL> select COLUMN_NAME,DATA_TYPE,DATA_LENGTH
      2  from user_tab_columns
      3  where table_name='TTTT'
      4  /
     
    COLUMN_NAME                    DATA_TYPE                                                                        DATA_LENGTH
    ------------------------------ -------------------------------------------------------------------------------- -----------
    COL_1                          CHAR                                                                                      22
    COL_2                          VARCHAR2                                                                                  60
      

  3.   

    CHAR (size ) 
    用于保存定长(size)字节的字符串数据。
    每行定长(不足部分补为空格);最大长度为每行2000字节,缺省值为每行1字节。设置长度(size)前需考虑字符集为单字节或多字节。数据库字符集在创建后原则上不能更改。不过有2种方法可行。
    1. 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换。
    2. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。