插入数据时产生的问题:
-------------------------------------------------
数据表F_A,其有字段F1,类型为NVarchar2,长度20,
为表F_A插入一条数据,其中为字段F1插入的是16个长度的数字字符,比如“1011100000000000”,但是Oracle返回错误信息:
ORA-12899: value too large for column "myUser"."F_A"."F1" (actual: 41, maximum: 20)相关环境及配置:
=====================================
服务器:
-------------------
操作系统:Red Hat Enterprise Linux 5.4 英文版
oracle版本:11.2.0.1
oracle字符集:AMERICAN_AMERICA.AL32UTF8 
客户端:
-------------------
操作系统:windows XP sp3 繁体版
oracle客户端版本:11.2.0.1
oracle客户端字符集:TRADITIONAL_CHINESE_TWIWAN.ZHT16MSWIN950
MDAC版本:2.81.1132
=========================
完全相同的配置,在我们自己的机子上运行没任何问题,
而在客户那里却会报ORA-12899错误
求各位高人指点,急!谢谢!

解决方案 »

  1.   

    开发工具:Delphi7
    数据操作组件:ADO
      

  2.   

    1011100000000000
    看看你的这个串里有没有全角字符。
    或者在insert之前,把length(F_A.F1)的结果输出一下,看看长度到底是多少。
      

  3.   

    实测有没任何问题:
    不过我们的字符集是不一样的。我的是UNICODE下面是关于NVARCHAR2的说明:Variable-length Unicode character string having maximum length size characters. The number of bytes can be up to two times size for AL16UTF16 encoding and three times size for UTF8 encoding. Maximum size is determined by the national character set definition, with an upper limit of 4000 bytes. You must specify size for NVARCHAR2.
    可见与你数据库的字符集的设置是有关的。
      

  4.   

    是不是插入的数据含有空格之类的,用trim()去掉插入试试
      

  5.   

    谢谢前面各位的提示,
    to yixilan:insert 之前做过输出,输出内容完全正常更为重要的是在我们自己安装了多台服务器,客户机,
    也和客户运行环境完全相同的,也不有同的,
    服务器有windows,有linux,有中文版有英文版,
    客户机,是windows xp,有中文繁体\中文简体\英文版的,运行过程都没任何问题但在客户那里运行就是出错,
    是不是oracle的某些设置会引起这种情况,
    急,谢谢大家了!
      

  6.   

    怀疑是Oracle环境设置字符集这方面的问题。
      

  7.   

    to java3344520:
    谢谢你的回复由于服务器的字符集为:AMERICAN_AMERICA.AL32UTF8  
    所以我们尝试将客户端的字符集也改为:AMERICAN_AMERICA.WE8MSWIN1252
    但修改后依然有此问题
      

  8.   

    先用length查看一下它的实际字符长度,再看里面有没出现空格,或全角下的字符,也可能是字符集的问题
      

  9.   

    什么乱七八糟的,nvarchar2 是带编码存储的,你先dump一下看看它里面是什么就完事了,100%里面存的是4字节的汉字编码。
      

  10.   

    nvarchar2(20) 改成 nvarchar2(20 char) 看下
      

  11.   

    客户的电脑上,其他应用程序修改了oracle字符集的环境变量,导致了这个问题