create table a (a nvarchar2(3) default Null null);

解决方案 »

  1.   

    但是这句话在两个版本一个对一个不对。我想不应该改sql吧。应该处理字符集的问题吧?
    而且'',和null。这两个付职应该是完全不同的吧?
      

  2.   

    create table a (a nvarchar2(3) default null);这样就行了
      

  3.   

    国家字符集问题,有的字符集是用两个字符表示一个字符的,像 汉字
    你把nvarchar2改为varchar2应该就没有问题了
      

  4.   

    create table a (a nvarchar2(3) default null); 与create table a (a nvarchar2(3) default '' null);
    的意思可是不一样得呀,楼上
      

  5.   

    to xbm2008(大道至简) 这种没用过,能解释一下吗
      

  6.   

    ORACLE 中'' 被解析成NULL了。
    楼主的写法
    create table a (a nvarchar2(3) default '' null);
    default 值就是等于NULL
      

  7.   

    create table a (a nvarchar2(3) default Null null);
    第一个NULL是default 的值,就是默认为NULL
    后面的NULL是表示字段可以为NULL,是字段的约束
      

  8.   

    我现在的情况是这样的:
       数据结构是一个成型系统,以sqlserver为数据库做好的.(现在需要同时支持oracle)表结构多而复杂,以上脚本是批量转换过来的。如果我手工调整sql将是非常不现实的一个做法.
    但经过测试,这种写法在9i完全通过,但8i中提示如上错误. 
       所以想请教大家,是否可以通过调整字符集的方式,解决这个问题?怎么做?
    小妹先谢!
      

  9.   

    在SQLSERVER中''是一个空格的意思
    在ORACLE中''是NULL的意思
    即使你在9I中执行
    create table a (a nvarchar2(3) default '' null);
    成功了也和和SQLSERVER中意思不一样了。
    应为SQLSERVER中字段default 的值是空格,到ORACLE中变成默认NULL了。我们以前平台移转的策略是改成:
    create table a (a nvarchar2(3) default ' ' null);
      

  10.   

    是create table a (a varchar2(3) default ' ' null);
      

  11.   

    呵呵,是这样的啊,没看过来,如果是:
    create table a (a nvarchar2(3) default null not null);这样的话我就知道了,以前我用SQL SERVER都是把后一个NULL写在DEFAULT的前面。所以一时间没看出是什么意思
      

  12.   

    TO 楼主,你可以用文本替换 把default '' null全部替换成default null null
      

  13.   

    to:hippie1024(痞子)
    感谢你的经验策略,再请教一下,如果''被解析为null,我认为这一句,前后矛盾就应该不成立啊?但是结果是成立的。为什么?
    create table a(a varchar2 default '' not null);
    create table a(a varchar2 default null not null);
    两句都成立,为什么啊?我不明白,a字段我不让其为空,那么按说,他不能为null,如果是'  '这倒是还能理解。
      

  14.   

    呵呵,这点我也觉得比较奇怪的,这种矛盾应该ORACLE避免么。
    就这样理解吧,default null 表示在为对字段赋值情况下ORACLE作的默认赋值操作。
    后面的not null 是字段的一个约束,在赋值的时候会做检查。
    create table a(a varchar2 default null not null);
    这样的句子其本身和create table a(a varchar2  not null);
    是一样的等于没有默认值。(在没有给默认值的情况下ORACLE赋值就是NULL)
    在INSERT的时候不对该字段赋非空值的话就会报错的。