现在的位置: 首页 > 综合 > 正文

导入汉字名称的要素类提示ORA-00911: invalid character

2013年10月10日 ⁄ 综合 ⁄ 共 1458字 ⁄ 字号 评论关闭

操作系统:Linux、ArcSDE10、Oracle11.1.0.6

在这种环境下,使用arcCatalog的import工具,导入一个或者多个带有汉字名称的要素类,报如下错误

Executing: FeatureClassToFeatureClass D:\data\from\TestCAD.gdb\保护煤柱_line "Database Connections\Connection to 192.168.100.200.sde" 保护煤柱 # "SHAPE_Length "SHAPE_Length" false true true 8 Double 0 0 ,First,#,D:\data\from\TestCAD.gdb\保护煤柱_line,SHAPE_Length,-1,-1" #
Start Time: Fri Jul 15 15:03:49 2011
ERROR 999999: Error executing function.
Underlying DBMS error [ORA-00911: invalid character
(SDE.保护煤柱)] [SDE.保护煤柱]
Failed to execute (FeatureClassToFeatureClass).
Failed at Fri Jul 15 15:03:49 2011 (Elapsed Time: 0.00 seconds)

看到Ora错误直观肯定是字符集的问题,所谓字符集包括操作系统的字符集、数据库的字符集,那么肯定是我们的这些字符集不支持汉字导致的。

我们可以使用一些方法查看操作系统字符集一般写在环境变量或者一些系统文件中,数据库的字符集可以使用select userenv('language') from dual来获得

我们查询一下出错服务器的数据库的字符集信息

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.WE8MSWIN1252

明显的是AMERICAN.......肯定不支持汉字了

那么怎么产生的呢?在我们安装操作系统中,如果你不太注意字符集这块,一般都是默认的,可能使用了英文版本而且没有修改字符集,所以默认这个了,在我们安装数据库时,默认的字符集是


是按照操作系统的字符集来说的

一般来说字符集是跟建库一块的就像使用的block Size不能更改的,如果一开始创建不符合就非常麻烦,网上说可以修改,但是不推荐http://space.itpub.net/519536/viewspace-580610出现问题还是重新建库吧

1. 如果需要修改字符集,通常需要导出数据库数据,重建数据库,再导入数据库数据的方式来转换

2. 通过ALTER DATABASE CHARACTER SET语句修改字符集,但创建数据库后修改字符集是有限制的,只有新的字符集是当前字符集的超集时才能修改数据库字符集,例如UTF8是US7ASCII的超集,修改数据库字符集可使用ALTER DATABASE CHARACTER SET UTF8。 
  

查看我导入没有问题的字符集

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK

抱歉!评论已关闭.